GraphQLTestTemplate 没有自动装配

GraphQLTestTemplate not getting autowired

我正在使用 GraphQLTestTemplate 模拟查询响应。

@RunWith(SpringRunner.class)
@GraphQLTest
public class UnitTest {

    @Autowired
    private GraphQLTestTemplate graphQlTestTemplate ;
}

当我 运行 单元测试时它给我错误:org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.graphql.spring.boot.test.GraphQLTestTemplate' available: expected at least 1 bean which qualifies as autowire candidate.

pom.xml:

        <graphql-spring-boot-starter-test.version>5.0.2</graphql-spring-boot-starter-test.version>
        <graphql-java-tools.version>5.2.4</graphql-java-tools.version>

在给你一个工作片段之前,我们必须澄清一些事情。

  • 我正在使用: graphql-spring-boot-starter
    graphql-spring-boot-starter-test ,两个版本 6.0.0.

    后者是嵌入junit 5所以你可能不需要使用需要使用@RunWith

  • GraphQLTest 只加载应用程序的切片上下文,这是与 GraphQL 相关的 beans,也就是说,在你的测试中你应该模拟你正在使用的 beans,比如您的解析器正在使用的服务。

话虽如此:这是我的工作测试示例,希望对您有所帮助。

@GraphQLTest
public class UserQueryIntTest {


    @Autowired
    private GraphQLTestTemplate graphQLTestTemplate;

    @MockBean
    UserService userServiceMock;


    @Test
    @WithMockUser(username = TEST_USERNAME)
    public void getUser() throws Exception {

        User user = new User();
        user.setUsername(TEST_USERNAME);
        user.setPassword(TEST_PASSWORD);
        doReturn(user).when(userServiceMock).getUser(TEST_USERNAME, TEST_PASSWORD);

        GraphQLResponse response = graphQLTestTemplate.postForResource("graphql/get-user.graphql");
        assertThat(response.isOk()).isTrue();
        assertThat(response.get("$.data.getUser.id")).isNotNull();
        assertThat(response.get("$.data.getUser.username")).isEqualTo(TEST_USERNAME);
    }
}