WireMock.Net para C# (.NET): guía completa con ejemplos

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.Net para C# (.NET): Guía completa

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

WireMock.Net es una potente librería para crear servidores HTTP mock (simulados) en el ecosistema .NET. Es la implementación directa en C# del popular proyecto Java WireMock. Su función principal es emular el comportamiento de servicios HTTP/HTTPS reales (REST API, SOAP, gRPC, etc.) durante las pruebas o el desarrollo.

¿Por qué es necesaria? En la arquitectura moderna de microservicios, tu aplicación a menudo depende de decenas de APIs externas. Usar servicios reales en pruebas unitarias o de integración genera varios problemas: inestabilidad por servidores caídos, lentitud, costos por llamadas a APIs de pago e imposibilidad de probar escenarios poco comunes (como un error 500 o un timeout). WireMock.Net resuelve estos problemas permitiéndote «simular» el servicio externo de forma local.

Casos de uso clave: pruebas unitarias de clientes HTTP (HttpClient), pruebas de integración de aplicaciones web, desarrollo «offline» (cuando el backend aún no está listo), pruebas de manejo de errores y timeouts, y creación de entornos de prueba aislados (sandbox).

2. Instalación

La librería se distribuye a través de NuGet. Para instalarla, usa uno de los siguientes comandos:

Mediante .NET CLI (recomendado):

dotnet add package WireMock.Net

Mediante Package Manager Console (Visual Studio):

Install-Package WireMock.Net

Para trabajar con pruebas asíncronas y Fluent Assertions (opcional, pero útil):

dotnet add package WireMock.Net.FluentAssertions

Nota: A diferencia de Python (pip) o Node.js (npm), en .NET se usa el gestor de paquetes NuGet.

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

Crea una aplicación de consola o un proyecto de prueba (xUnit/NUnit). A continuación, se muestra el código mínimo que inicia un servidor mock en el puerto 9876 y devuelve una respuesta JSON a una petición GET.

using WireMock.Server;
using WireMock.RequestBuilders;
using WireMock.ResponseBuilders;

// 1. Iniciamos el servidor (por defecto en un puerto aleatorio, pero aquí especificamos uno)
var server = WireMockServer.Start(9876);

// 2. Configuramos el stub (simulacro)
server.Given(
    Request.Create()
        .WithPath("/api/users/1")
        .UsingGet()
)
.RespondWith(
    Response.Create()
        .WithStatusCode(200)
        .WithHeader("Content-Type", "application/json")
        .WithBody("{ \"id\": 1, \"name\": \"Juan Pérez\" }")
);

Console.WriteLine($"Servidor mock ejecutándose en {server.Urls[0]}");
Console.WriteLine("Presiona cualquier tecla para detener...");
Console.ReadKey();

// 3. Detenemos el servidor
server.Stop();

Después de ejecutarlo, abre el navegador o usa curl: curl http://localhost:9876/api/users/1. Obtendrás la respuesta JSON.

4. Métodos/funciones/clases principales

4.1. WireMockServer.Start()

Firma: public static WireMockServer Start(int? port = null, bool ssl = false)

Descripción: Método estático que crea e inicia una instancia del servidor mock. Si no se especifica un puerto, se elige uno libre al azar.

// Iniciar en el puerto 5000
var server = WireMockServer.Start(5000);

// Iniciar en un puerto aleatorio
var serverRandom = WireMockServer.Start();

4.2. server.Given()

Firma: public IRespondWithAwareResponseBuilder Giv

Recommendations