Re-direccione las solicitudes a las Clases de Utilidad de SideEffect.
Para una aplicación de Spring Boot que necesita ser probada, a continuación se muestra mi consulta.
@CustomLog
@RestController
@RequestMapping("/my_path")
public class MyController {
@GetMapping(path = "**", produces = {MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<jsonnode> fetchData(HttpServletRequest request){
... algún código.....que también llama a APIs externas.....
}
@PostMapping(path = "**", produces = {MediaType.APPLICATION_JSON_VALUE})
@ResponseBody
public ResponseEntity<><string, object="">> createMOI(HttpServletRequest request){
... algún código.....que también llama a APIs externas.....
}
}
Mi aplicación llama a un servicio externo que ahora necesita ser simulado.
this.webClient = WebClient.builder().baseUrl("http://localhost:9600/external_host_path")
.defaultHeader(HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_JSON_VALUE)
.build();
Mono<pojo> responseMo = webClient.post().uri("/aGivenSubPath")
.accept(MediaType.APPLICATION_JSON).bodyValue(requestPoJo)
.retrieve().bodyToMono(Pojo.class).block();
Estoy llamando a la API de mi controlador con MVC como parte de springtest.
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyControllerTest {
@Autowired
MyController controller;
@Before
public void setup() throws Exception {
this.mockMvc = standaloneSetup(this.controller).build();
}
@Test
public void testControl() throws Exception {
mockMvc
.perform(post("http://localhost:9600/my_path")
.contentType(MediaType.APPLICATION_JSON)
.content("{'someData':'[]'}"))
.andExpect(status().isAccepted())
.andReturn();
}
}
Lo que estoy buscando es de alguna manera interceptar o afectar
http://localhost:9600/external_host_path
y redirigir todas las llamadas realizadas a este host a una clase de utilidad personalizada que proporcione una respuesta basada en los parámetros de solicitud al host externo de forma programática.
He visto múltiples ejemplos de mockito, wireMock, mockwebserver, mockserver, etc., pero la mayoría de ellos funcionan en una ruta dada (ruta estática) – cuando se llama una ruta estática – luego se proporciona una respuesta estática. Tengo muchas llamadas en todo el flujo y ya tengo la lógica de la clase de utilidad para generar respuestas para los argumentos de solicitud proporcionados.</string,>
davy.ai
Para simular el servicio externo llamado en la aplicación Spring Boot, puedes usar una biblioteca de simulación dinámica como MockServer para interceptar y responder a las solicitudes HTTP realizadas por la aplicación en tiempo de ejecución.
Aquí tienes los pasos generales para lograr esto:
WebClient
para reemplazar la URL codificada por una búsqueda de propiedad.Ten en cuenta que es posible que debas ajustar la configuración de
WebClient
y MockServer para que se adapten a los requisitos de tu caso de uso específico. Por ejemplo, es posible que debas configurar SSL o manejar la autenticación.