Cant autowire `WebTestClient` - без автоматической настройки
Мы используем Spring Framework 5 и Spring Boot 2.0.0.M6, и мы также используем WebClient
для реактивного программирования. Мы создали тестовые методы для наших конечных точек реактивного отдыха, и поэтому я нашел пример того, как это сделать. Я нашел этот или этот и многие другие, которые, где все то же самое. Они просто автоматически WebTestClient
, И я попробовал то же самое:
@Log
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class MyControllerTest {
@Autowired
private WebTestClient webClient;
@Test
public void getItems() throws Exception {
log.info("Test: '/items/get'");
Parameters params = new Parameters("#s23lkjslökjh12", "2015-09-20/2015-09-27");
this.webClient.post().uri("/items/get")
.accept(MediaType.APPLICATION_STREAM_JSON)
.contentType(MediaType.APPLICATION_STREAM_JSON)
.body(BodyInserters.fromPublisher(Mono.just(params), Parameters.class))
.exchange()
.expectStatus().isOk()
.expectHeader().contentType(MediaType.APPLICATION_STREAM_JSON)
.expectBody(Basket.class);
}
}
Я не могу запустить это, потому что я получаю ошибку:
Could not autowire. No beans of 'WebTestClient' type found.
Так что не похоже, что существует автоматическая конфигурация. Я использую неправильную версию или в чем тут дело?
2 ответа
Аннотировать ваш MyControllerTest
тестовый класс с @AutoConfigureWebTestClient
аннотаций. Это должно решить проблему.
Принятый ответ будет продолжать вызывать эту ошибку, вместо этого мне пришлось добавить стартер webflux в дополнение к тестовому стартеру в Spring Boot 2.0.3:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
Затем используйте стандартные аннотации веб-теста:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class IntegrationTest {
@Autowired
private WebTestClient webClient;
@Test
public void test() {
this.webClient.get().uri("/ui/hello.xhtml")
.exchange().expectStatus().isOk();
}
}