En este post vamos a hablar a nivel muy básico de Wiremock, que es una excelente herramienta que nos permitirá simular APIs, o bien REST o bien SOAP.
Wiremock se puede usar, creando ficheros json que configuren cada servicio a simular. Y luego ejecutandolo como librería java en modo 'standalone'. Pero en este caso nos vamos a centrar en su configuración programaticamente y como probarlo con JUnit.
Ya vimos anteriormente como hacer un cliente REST y que son los @Rule de JUnit. Por lo que usaremos ambas cosas, para simular un servicio que nos permita probar dicho cliente.
Para empezar creamos el @Rule que nos configurará de forma básica el wiremock. Lo único que deberemos hacer es indicar en que puerto estará escuchando el Wiremock para simular el servicio.
@Autowired private BookRestClient client; @Rule public WireMockRule wireMockRule = new WireMockRule(WireMockConfiguration.options().port(8085));
Lo siguiente es configurar el servicio. ¿Como hacemos esto? Indicando a que peticiones va a estar escuchando y que devolverá cuando le llegue esa petición.
Tanto a la hora de crear la URL en la que esta esperando el wiremock como a la hora de crear la respuesta se puede configurar multiples cosas. A la hora de crear la URL se pueden indicar wildcard y leer parte de la llamada para incluirlo en la salida. A la hora de crear la respueta podemos indicar el código HTTP de respuesta, múltiples cabeceras HTTP o la respuesta del mismo.
@Before public void setup() { String body = "{\"id\":1,\"title\":\"1984\",\"author\":\"George Orwell\"}"; ResponseDefinitionBuilder response = WireMock.aResponse().withBody(body).withStatus(200).withHeader("Content-Type", "application/json"); WireMock.stubFor(WireMock.get("/book/1").willReturn(response)); }
Ya solo nos queda hacer la prueba del cliente que creamos anteriormente. Recordemos que ese cliente estaba configurado para llamar a la dirección 'http://localhost:8085'. El mismo puerto que configuramos en el wiremock.
@Test public void testFindByName() { Book book = client.getBook(1); Assert.assertEquals(book.getTitle(), "1984"); }
No hay comentarios:
Publicar un comentario