WireMock.Net C# (.NET) 完整指南:安装、方法与实战示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

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

推荐