WireMock.Net para C# (.NET): Guia Completo
1. O que é e para que serve?
WireMock.Net é uma biblioteca poderosa para criar servidores HTTP mock (stubs) no ecossistema .NET. Ela é a implementação direta em C# do popular projeto Java WireMock. O principal objetivo da biblioteca é simular o comportamento de serviços HTTP/HTTPS reais (REST API, SOAP, gRPC, etc.) durante testes ou desenvolvimento.
Por que isso é necessário? Na arquitetura moderna de microsserviços, sua aplicação geralmente depende de dezenas de APIs externas. Usar serviços reais em testes unitários ou de integração gera vários problemas: instabilidade dos testes devido à indisponibilidade do servidor, lentidão, custos financeiros com chamadas de APIs pagas e impossibilidade de testar cenários raros (como erro 500 ou timeout). O WireMock.Net resolve esses problemas, permitindo que você "substitua" o serviço externo localmente.
Principais casos de uso: teste unitário de clientes HTTP (HttpClient), teste de integração de aplicações web, desenvolvimento "offline" (quando o backend ainda não está pronto), teste de tratamento de erros e timeouts, além da criação de ambientes de teste isolados (sandbox).
2. Instalação
A biblioteca é distribuída via NuGet. Para instalar, use um dos seguintes comandos:
Via .NET CLI (recomendado):
dotnet add package WireMock.Net
Via Package Manager Console (Visual Studio):
Install-Package WireMock.Net
Para trabalhar com testes assíncronos e Fluent Assertions (opcional, mas útil):
dotnet add package WireMock.Net.FluentAssertions
Observação: Diferente do Python (pip) ou Node.js (npm), no .NET usa-se o gerenciador de pacotes NuGet.
3. Início rápido — exemplo mínimo funcional
Crie um aplicativo console ou um projeto de teste (xUnit/NUnit). Abaixo está o código mínimo que inicia um servidor mock na porta 9876, retornando uma resposta JSON para uma requisição GET.
using WireMock.Server;
using WireMock.RequestBuilders;
using WireMock.ResponseBuilders;
// 1. Iniciamos o servidor (por padrão em uma porta aleatória, mas vamos especificar uma)
var server = WireMockServer.Start(9876);
// 2. Configuramos o stub
server.Given(
Request.Create()
.WithPath("/api/users/1")
.UsingGet()
)
.RespondWith(
Response.Create()
.WithStatusCode(200)
.WithHeader("Content-Type", "application/json")
.WithBody("{ \"id\": 1, \"name\": \"João Silva\" }")
);
Console.WriteLine($"Servidor mock rodando em {server.Urls[0]}");
Console.WriteLine("Pressione qualquer tecla para parar...");
Console.ReadKey();
// 3. Paramos o servidor
server.Stop();
Após iniciar, abra o navegador ou use curl: curl http://localhost:9876/api/users/1. Você receberá a resposta JSON.
4. Principais métodos/funções/classes
4.1. WireMockServer.Start()
Assinatura: public static WireMockServer Start(int? port = null, bool ssl = false)
Descrição: Método estático que cria e inicia uma instância do servidor mock. Se a porta não for especificada, uma porta livre aleatória é escolhida.
// Iniciar na porta 5000
var server = WireMockServer.Start(5000);
// Iniciar em porta aleatória
var serverRandom = WireMockServer.Start();
4.2. server.Given()
Assinatura: public IRespondWithAwareResponseBuilder Given
Descrição: Método usado para definir uma regra de stub. Ele recebe um objeto de requisição (criado com Request.Create()) e retorna um builder para configurar a resposta.
server.Given(
Request.Create()
.WithPath("/api/users/*")
.UsingGet()
)
.RespondWith(
Response.Create()
.WithStatusCode(200)
.WithBody("{\"mensagem\": \"usuário encontrado\"}")
);
Explicação: O método Given define que, para qualquer requisição GET em /api/users/*, o servidor deve responder com status 200 e o JSON especificado.
Também na biblioteca
Cache em C# (.NET): Redis, MemoryCache e outras soluções
CameraX para Kotlin: guia completo com exemplos práticos
Configuração de aplicações PHP: bibliotecas e ferramentas para gerenciamento de configurações
Internacionalização (i18n) em Kotlin: guia completo
Container de Injeção de Dependência para JavaScript (Node.js): Awilix