Nous utilisons Spring Framework 5 et Spring Boot 2.0.0.M6 et nous utilisons également WebClient
pour la programmation réactive. Nous avons créé des méthodes de test pour nos points d'extrémité de repos réactifs et j'ai donc recherché un exemple sur la façon de le faire. J'ai trouvé ce un ou ce et bien d'autres qui étaient tout de même. Ils viennent de câbler automatiquement un WebTestClient
. J'ai donc essayé la même chose:
@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);
}
}
Je ne peux pas l'exécuter car j'obtiens l'erreur:
Could not autowire. No beans of 'WebTestClient' type found.
Il ne semble donc pas qu'il existe une configuration automatique. Dois-je utiliser la mauvaise version ou quel est le problème ici?
Annotez votre classe de test MyControllerTest
avec @AutoConfigureWebTestClient
annotation. Cela devrait résoudre le problème.
La réponse acceptée continue de me renvoyer cette erreur, au lieu de cela, j'ai dû ajouter le démarreur webflux en plus du démarreur de test dans 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>
Utilisez ensuite les annotations de test Web standard:
@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();
}
}