1

我正在使用 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>
4

1 回答 1

2

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

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

    后者是嵌入的junit 5,因此您可能不需要使用需要使用@RunWith

  • GraphQLTest 仅加载应用程序的切片上下文,它们是与 GraphQL 相关的 bean,也就是说,在您的测试中,您应该模拟您在后台使用的 bean,例如您的解析器正在使用的服务。

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

@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);
    }
}
于 2020-04-19T10:09:28.107 回答