Spring Boot WebFlux GraphQL测试遇UnsatisfiedDependencyException求助
问题概述
测试类中通过@Autowired注入GraphQlTester时,Spring容器找不到对应类型的bean,抛出异常:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.cg.bms.QueryTests': Unsatisfied dependency expressed through field 'graphQlTester': No qualifying bean of type 'org.springframework.graphql.test.tester.GraphQlTester' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
排查与解决步骤
1. 确认测试依赖是否正确引入
GraphQlTester的自动配置依赖spring-boot-starter-graphql-test包,必须确保该依赖已添加到测试环境:
- Maven(pom.xml):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-graphql-test</artifactId> <scope>test</scope> </dependency> - Gradle(build.gradle):
testImplementation 'org.springframework.boot:spring-boot-starter-graphql-test'
2. 检查@GraphQlTest注解的使用
- 确保
@GraphQlTest(PostGraphQLController.class)中的PostGraphQLController是有效的GraphQL控制器:该类需标注@Controller,且内部的查询/突变方法已用@QueryMapping或@MutationMapping注解标记。 @GraphQlTest仅会加载与GraphQL相关的组件,若控制器未正确关联GraphQL配置,会导致自动配置GraphQlTester失败。
3. 核对测试类的包结构
测试类需与被测试的PostGraphQLController处于相同包或子包下,或者确保Spring的组件扫描能覆盖到控制器类,避免因组件扫描范围问题导致容器无法识别目标控制器。
4. 手动配置GraphQlTester(备选方案)
若上述方法无效,可手动构建GraphQlTester实例:
@GraphQlTest(PostGraphQLController.class) class QueryTests { @Autowired WebTestClient webTestClient; private GraphQlTester graphQlTester; @MockBean PostServiceImpl postService; @BeforeEach void setUp() { graphQlTester = WebGraphQlTester.create(webTestClient); } @Test void getAllPosts(){ // 测试逻辑 } }
内容的提问来源于stack exchange,提问作者C P

