WireMock para Java: Guia Completo do Servidor HTTP Mock
1. O que é e para que serve
WireMock é uma biblioteca poderosa para Java (e outras linguagens através do servidor standalone) que permite criar servidores HTTP mock para testes. Basicamente, é um emulador de um serviço HTTP real (API, REST, SOAP) que você pode configurar para retornar respostas predefinidas para requisições específicas. É uma ferramenta indispensável no arsenal de qualquer desenvolvedor ou testador que trabalhe com arquitetura de microsserviços ou sistemas que dependem de serviços HTTP externos.
Para que serve? No desenvolvimento moderno, aplicativos raramente existem isoladamente. Eles se comunicam com bancos de dados, gateways de pagamento, serviços de autenticação, APIs climáticas e dezenas de outros sistemas externos. Testar essas integrações "ao vivo" é uma dor de cabeça: o serviço externo pode estar indisponível, lento, retornar dados inesperados ou, pior ainda, cobrar por cada requisição. O WireMock resolve esse problema, permitindo:
- Testar isoladamente: Você testa apenas seu código, sem depender da disponibilidade e estabilidade de serviços externos.
- Simular cenários raros: Force o mock a retornar erros 500, timeouts, respostas vazias ou cabeçalhos específicos — algo difícil de reproduzir com um serviço real.
- Acelerar os testes: O servidor mock responde em milissegundos, enquanto um serviço real pode levar segundos.
- Paralelizar o desenvolvimento: Enquanto o time de backend ainda não implementou a API, o time de frontend já pode escrever e testar seu código usando WireMock.
WireMock funciona como um servidor HTTP completo (baseado no Jetty), que é iniciado dentro do seu teste ou como um processo separado. Ele intercepta requisições HTTP, compara com regras configuradas (stubs) e retorna a resposta correspondente. A biblioteca suporta gravação e reprodução (record/playback), verificação de estado (verify), uso de templates (Handlebars), simulação de atrasos e muito mais.
2. Instalação
O WireMock para Java é distribuído via Maven Central. Adicione a seguinte dependência ao seu pom.xml (para Maven) ou build.gradle (para Gradle).
Maven (pom.xml):
<dependency>
<groupId>org.wiremock</groupId>
<artifactId>wiremock</artifactId>
<version>3.9.1</version> <!-- Verifique a versão mais recente no Maven Central -->
<scope>test</scope>
</dependency>
Gradle (build.gradle):
testImplementation 'org.wiremock:wiremock:3.9.1'
Importante: A partir da versão 3.x, o WireMock requer Java 11 ou superior. Se você usa Java 8, precisará usar a versão 2.x (por exemplo, 2.35.1), mas é altamente recomendável migrar para Java 11+.
3. Início rápido — exemplo mínimo funcional
Vamos criar um teste simples que inicia o WireMock, configura um stub para uma requisição GET a /api/hello e verifica se o cliente recebe a resposta 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;
Também na biblioteca
Validação de dados em C++: bibliotecas, padrões e exemplos de código
JsonWebToken para JavaScript (Node.js): guia completo com exemplos
doctest para C++: guia completo com exemplos práticos
Cliente Redis para TypeScript: ioredis e redis