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.