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