Saltar al contenido

La prueba Spring Boot WebFlux no encuentra MockMvc

Comprende el código correctamente antes de adaptarlo a tu proyecto y si ttienes algo que aportar puedes decirlo en los comentarios.

Solución:

Como esta pregunta parece aparecer en la parte superior de las listas de búsqueda cuando las personas intentan probar sus puntos finales después de haber cambiado a Spring WebFlux, agregaré lo que pude determinar aquí. (Cabe señalar que en el pasado me estaba costando mucho conseguir la WebTestClient para funcionar con RestController extremos anotados. Pero este código funciona. Creo que me faltaba una dependencia y no estaba claro).

MiServicio.java

@Service
public class MyService 
     public String doSomething(String input) 
         return input + " implementation";
     

MiControlador.java

@RestController
@RequestMapping(value = "/api/v1/my")
public class MyController {
    @Autowired
    private MyService myService;

    @RequestMapping(value = "", method = RequestMethod.POST, consumes = APPLICATION_JSON_VALUE)
    public ResponseEntity> processPost(@RequestBody String input)
    
        String response = myService.doSomething(input);
        return ResponseEntity.ok(Mono.just(response));
    

PruebaMiControlador.java

@ExtendWith(SpringExtension.class)
@WebFluxTest(MyController.class)
public class TestMyController 
    @Autowired
    private WebTestClient webTestClient;

    @MockBean
    private MyService myService;

    @Test
    public void testPost() throws Exception 
          // Setup the Mock MyService. Note the 'mocked' vs 'implementation' 
          when(myService.doSomething(anyString())).thenAnswer((Answer) invocation -> 
               String input = invocation.getArgument(0);
               return input + " mocked";
          );

          String response = webTestClient.post()
                .uri("/api/v1/my")
                .body(BodyInserters.fromObject("is"))
                .accept(MediaType.APPLICATION_JSON)
                .exchange()
                .expectStatus().isOk()
                .returnResult(String.class)
                .getResponseBody()
                .blockFirst();
          assertThat(response).matches("is mocked");
    

Las dependencias que pueden causar problemas que son difíciles de diagnosticar parecen ser de reactor-test. Entonces, si WebTestClient no funciona, asegúrese de que exista la dependencia.

pom.xml

    
        org.springframework.boot
        spring-boot-starter-webflux
        2.1.5.RELEASE
    
    
        org.springframework.boot
        spring-boot-starter-test
        2.1.5.RELEASE
        test
    
    
        io.projectreactor
        reactor-test
        3.2.9.RELEASE
        test
    
    
        org.springframework
        spring-test
        test
        
            
                jackson-module-kotlin
                com.fasterxml.jackson.module
            
        
    
    
        org.junit.jupiter
        junit-jupiter
        5.4.2
        test
    
    
        com.google.truth
        truth
        0.45
        test
    

Como señaló M. Deinum, MockMvc no está cargado para la configuración de WebFlux en Spring Boot. necesitas usar WebTestClient en lugar de. Así que reemplace AutoConfigureMockMvc con Cliente de prueba web de configuración automática y utilice los métodos webTestClient en su lugar.

Una cosa a tener en cuenta es que esto está haciendo llamadas web reales detrás de escena e iniciará el servidor. MockMVC no inicia el servidor. ¿Cuál es la diferencia entre MockMvc y WebTestClient?

Comentarios y valoraciones

Si para ti ha resultado útil nuestro post, te agradeceríamos que lo compartas con más programadores y nos ayudes a difundir este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *