WireMock.Net C# (.NET) 完整指南
1. 什么是 WireMock.Net?为什么需要它?
WireMock.Net 是 .NET 生态系统中一个强大的 HTTP Mock 服务器(模拟服务器)库。它是流行 Java 项目 WireMock 的 C# 直接实现。该库的核心功能是在测试或开发过程中模拟真实 HTTP/HTTPS 服务(如 REST API、SOAP、gRPC 等)的行为。
为什么需要它?在现代微服务架构中,您的应用程序通常依赖于数十个外部 API。在单元测试或集成测试中使用真实服务会带来一系列问题:因服务器不可用导致的测试不稳定、运行缓慢、调用付费 API 产生的财务成本,以及无法测试罕见场景(例如 500 错误或超时)。WireMock.Net 通过允许您在本地“替换”外部服务来解决这些问题。
主要使用场景:HTTP 客户端(HttpClient)的单元测试、Web 应用程序的集成测试、离线开发(当后端尚未就绪时)、错误处理和超时测试,以及创建隔离的测试环境(沙箱)。
2. 安装指南
该库通过 NuGet 分发。请使用以下任一命令进行安装:
通过 .NET CLI(推荐):
dotnet add package WireMock.Net
通过 Package Manager Console(Visual Studio):
Install-Package WireMock.Net
用于异步测试和 Fluent Assertions(可选,但很有用):
dotnet add package WireMock.Net.FluentAssertions
注意: 与 Python(pip)或 Node.js(npm)不同,.NET 使用 NuGet 包管理器。
3. 快速上手——最小工作示例
创建一个控制台应用程序或测试项目(xUnit/NUnit)。以下是最小代码,它在端口 9876 上启动一个 Mock 服务器,并在收到 GET 请求时返回 JSON 响应。
using WireMock.Server;
using WireMock.RequestBuilders;
using WireMock.ResponseBuilders;
// 1. 启动服务器(默认使用随机端口,但我们指定一个具体端口)
var server = WireMockServer.Start(9876);
// 2. 配置桩(stub)
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 running on {server.Urls[0]}");
Console.WriteLine("Press any key to stop...");
Console.ReadKey();
// 3. 停止服务器
server.Stop();
启动后,打开浏览器或使用 curl:curl http://localhost:9876/api/users/1。您将收到 JSON 响应。
4. 核心方法/函数/类
4.1. WireMockServer.Start()
签名: public static WireMockServer Start(int? port = null, bool ssl = false)
描述: 静态方法,用于创建并启动 Mock 服务器实例。如果未指定端口,则选择随机空闲端口。
// 在端口 5000 上启动
var server = WireMockServer.Start(5000);
// 在随机端口上启动
var serverRandom = WireMockServer.Start();
4.2. server.Given()
签名: public IRespondWithAwareResponseBuilder Giv