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);
}
}