GraphQLTestTemplate не подключается автоматически

Я использую 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>

1 ответ

Решение

Прежде чем дать вам рабочий фрагмент, мы должны прояснить несколько вещей.

  • Я использую:graphql-spring-boot-starter а также
    graphql-spring-boot-starter-test, обе версии 6.0.0.

    Последний встраивает junit 5 поэтому вам может не понадобиться использовать @RunWith

  • GraphQLTest загружает только нарезанный контекст вашего приложения, которые являются bean-компонентами, связанными с GraphQL, то есть в ваших тестах вы должны имитировать 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);
    }
}
Другие вопросы по тегам