WireMock Java: guía completa con ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

WireMock para Java: Guía completa del servidor HTTP mock

1. ¿Qué es y para qué sirve?

WireMock es una potente librería para Java (y otros lenguajes mediante un servidor standalone) que permite crear servidores HTTP mock para pruebas. Básicamente, es un emulador de un servicio HTTP real (API, REST, SOAP) que puedes configurar para que devuelva respuestas predefinidas a solicitudes específicas. Es una herramienta indispensable en el arsenal de cualquier desarrollador o tester que trabaje con arquitectura de microservicios o sistemas que dependan de servicios HTTP externos.

¿Para qué sirve? En el desarrollo moderno, las aplicaciones rara vez existen de forma aislada. Se comunican con bases de datos, pasarelas de pago, servicios de autenticación, APIs del clima y decenas de otros sistemas externos. Probar estas integraciones "en vivo" es un dolor de cabeza: el servicio externo puede no estar disponible, ser lento, devolver datos inesperados o, peor aún, cobrarte por cada solicitud. WireMock resuelve este problema permitiéndote:

  • Probar de forma aislada: Pruebas solo tu código, sin depender de la disponibilidad o estabilidad de servicios externos.
  • Simular escenarios poco comunes: Es fácil hacer que el mock devuelva errores 500, timeouts, respuestas vacías o encabezados específicos, algo difícil de reproducir con un servicio real.
  • Acelerar las pruebas: El servidor mock responde en milisegundos, mientras que un servicio real puede tardar segundos.
  • Paralelizar el desarrollo: Mientras el equipo de backend aún no ha implementado la API, el equipo de frontend ya puede escribir y probar su código usando WireMock.

WireMock funciona como un servidor HTTP completo (basado en Jetty) que se ejecuta dentro de tu prueba o como un proceso independiente. Intercepta las solicitudes HTTP, las compara con las reglas configuradas (stubs) y devuelve la respuesta correspondiente. La librería soporta grabación y reproducción (record/playback), verificación de estado (verify), trabajo con plantillas (Handlebars), simulación de retardos y mucho más.

2. Instalación

WireMock para Java se distribuye a través de Maven Central. Agrega la siguiente dependencia a tu archivo pom.xml (para Maven) o build.gradle (para Gradle).

Maven (pom.xml):

<dependency>
    <groupId>org.wiremock</groupId>
    <artifactId>wiremock</artifactId>
    <version>3.9.1</version> <!-- Verifica la versión más reciente en Maven Central -->
    <scope>test</scope>
</dependency>

Gradle (build.gradle):

testImplementation 'org.wiremock:wiremock:3.9.1'

Importante: A partir de la versión 3.x, WireMock requiere Java 11 o superior. Si usas Java 8, deberás usar la versión 2.x (por ejemplo, 2.35.1), pero se recomienda encarecidamente migrar a Java 11+.

3. Inicio rápido — ejemplo mínimo funcional

Vamos a crear una prueba sencilla que inicia WireMock, configura un stub para una solicitud GET a /api/hello y verifica que el cliente recibe la respuesta esperada.

import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.WireMock;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

Recommendations