WireMock.Net für C# (.NET): Das vollständige Handbuch
1. Was ist WireMock.Net und warum wird es benötigt?
WireMock.Net ist eine leistungsstarke Bibliothek zum Erstellen von HTTP-Mock-Servern (Stubs) im .NET-Ökosystem. Es handelt sich um eine direkte C#-Implementierung des beliebten Java-Projekts WireMock. Die Hauptaufgabe der Bibliothek besteht darin, das Verhalten echter HTTP/HTTPS-Dienste (REST API, SOAP, gRPC usw.) während des Testens oder der Entwicklung zu emulieren.
Warum ist das notwendig? In der modernen Microservice-Architektur ist Ihre Anwendung oft von Dutzenden externer APIs abhängig. Die Verwendung echter Dienste in Unit- oder Integrationstests führt zu einer Reihe von Problemen: Testinstabilität aufgrund von Serverausfällen, langsame Ausführung, finanzielle Kosten für den Aufruf kostenpflichtiger APIs und die Unmöglichkeit, seltene Szenarien (z. B. einen 500-Fehler oder Timeout) zu testen. WireMock.Net löst diese Probleme, indem es Ihnen ermöglicht, den externen Dienst lokal zu „ersetzen".
Wichtige Anwendungsszenarien: Unit-Tests von HTTP-Clients (HttpClient), Integrationstests von Webanwendungen, „Offline"-Entwicklung (wenn das Backend noch nicht fertig ist), Testen der Fehler- und Timeout-Behandlung sowie die Erstellung isolierter Testumgebungen (Sandbox).
2. Installation
Die Bibliothek wird über NuGet vertrieben. Verwenden Sie einen der folgenden Befehle zur Installation:
Über die .NET CLI (empfohlen):
dotnet add package WireMock.Net
Über die Package Manager Console (Visual Studio):
Install-Package WireMock.Net
Für asynchrone Tests und Fluent Assertions (optional, aber nützlich):
dotnet add package WireMock.Net.FluentAssertions
Hinweis: Im Gegensatz zu Python (pip) oder Node.js (npm) verwendet .NET den Paketmanager NuGet.
3. Schnellstart – Minimales funktionsfähiges Beispiel
Erstellen Sie eine Konsolenanwendung oder ein Testprojekt (xUnit/NUnit). Nachfolgend finden Sie den minimalen Code, der einen Mock-Server auf Port 9876 startet und auf eine GET-Anfrage eine JSON-Antwort zurückgibt.
using WireMock.Server;
using WireMock.RequestBuilders;
using WireMock.ResponseBuilders;
// 1. Server starten (standardmäßig auf einem zufälligen Port, wir geben aber einen bestimmten an)
var server = WireMockServer.Start(9876);
// 2. Stub konfigurieren
server.Given(
Request.Create()
.WithPath("/api/users/1")
.UsingGet()
)
.RespondWith(
Response.Create()
.WithStatusCode(200)
.WithHeader("Content-Type", "application/json")
.WithBody("{ \"id\": 1, \"name\": \"John Doe\" }")
);
Console.WriteLine($"Mock-Server läuft auf {server.Urls[0]}");
Console.WriteLine("Drücken Sie eine beliebige Taste zum Beenden...");
Console.ReadKey();
// 3. Server stoppen
server.Stop();
Öffnen Sie nach dem Start einen Browser oder verwenden Sie curl: curl http://localhost:9876/api/users/1. Sie erhalten eine JSON-Antwort.
4. Wichtige Methoden/Funktionen/Klassen
4.1. WireMockServer.Start()
Signatur: public static WireMockServer Start(int? port = null, bool ssl = false)
Beschreibung: Eine statische Methode, die eine Instanz des Mock-Servers erstellt und startet. Wenn kein Port angegeben wird, wird ein zufälliger freier Port ausgewählt.
// Start auf Port 5000
var server = WireMockServer.Start(5000);
// Start auf einem zufälligen Port
var serverRandom = WireMockServer.Start();
4.2. server.Given()
Signatur: public IRespondWithAwareResponseBuilder Giv
Auch in der Bibliothek
Objektserialisierung in TypeScript: Ein vollständiger Leitfaden
Datenbankmigrationen in Go: Überblick über Tools und Praktiken
Redis-Client für Kotlin: Lettuce und Kreds – Vergleich und Beispiele