WireMock.Net para C# (.NET): guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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.

Recommendations