jueves, 12 de octubre de 2017

Wiremock: Nivel básico

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