web-dev-qa-db-fra.com

Impossible d'autowire `WebTestClient` - pas de configuration automatique

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?

16
Mulgard

Annotez votre classe de test MyControllerTest avec @AutoConfigureWebTestClient annotation. Cela devrait résoudre le problème.

30
Lukáš Kořán

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

}
20
Xtreme Biker