什么是Moq,为什么在单元测试中要用它
Moq 是一个轻量、开源的 .NET 模拟(Mocking)框架,专为 C# 单元测试设计。它让你能快速创建接口或抽象类的“假实现”,从而隔离被测代码,避免依赖真实服务(比如数据库、HTTP 客户端、外部 API)。这样测试更稳定、更快,也更容易覆盖边界情况。
安装 Moq 并准备基础环境
在测试项目中通过 NuGet 安装 Moq 包:Moq(注意不是 Moq.NET 或其他变体)。安装后 using Moq 命名空间即可使用。
确保被测类依赖的是接口(如 IUserService),而不是具体实现(如 UserService) 测试方法应标记为 [TestMethod](MSTest)或 [Fact](xUnit) 不要在 Mock 对象上调用真实方法——除非你显式 CallBase = true用 Moq 创建和配置模拟对象
核心是 Mock
在被测类中注入 Mock 对象并运行测试
把 Mock 对象的 Object 属性传给被测类构造函数(或通过属性/方法注入),然后调用待测方法,最后断言结果和交互行为。
示例:若 UserController 构造函数接收 IUserRepository,就传入 mockUserRepo.Object 断言返回值是否符合预期(如用户不为空、状态码正确) 别忘了 Verify 关键交互——这是验证“协作逻辑”是否正确的关键基本上就这些。Moq 不复杂但容易忽略 Setup 的匹配规则(比如参数用 It.IsAny
