用途:为 .NET 项目提供测试设计层面的模式与规范,聚焦测试结构、模拟、断言、数据构造与集成测试写法;运行器配置(xUnit v2/v3、VSTest/MTP)由 xunit 技能负责,两者可并行使用。
主要能力:
- AAA 结构:每个测试一个逻辑断言,命名采用 Method_Scenario_ExpectedBehavior 或 Should_X_When_Y,测试内不写 if/else、不 sleep。
- 模拟库选择:Moq(生态大、语法冗长)、NSubstitute(语法简洁,推荐新项目)、FakeItEasy;给出 NSubstitute 与 Moq 的 Setup/Verify 写法示例。
- FluentAssertions:dotnet add package FluentAssertions,用 Should() 替代内置断言,支持集合、对象等价比较与异常断言。
- Test Data Builder:数据准备重复时改为链式 Builder,并提供隐式转换用法。
- Bogus:dotnet add package Bogus,用 Faker<T> 生成真实感假数据,适合种子数据与批量记录。
- 时间抽象:.NET 8+ 注入 TimeProvider,测试用 FakeTimeProvider,包为 Microsoft.Extensions.TimeProvider.Testing。
- 集成测试:WebApplicationFactory<Program> 覆盖中间件、路由、DI、控制器,可替换服务与数据库;Program 需声明为 partial。
- Testcontainers:dotnet add package Testcontainers.MsSql(或 PostgreSql、MySql、Redis),用真实数据库容器测试 EF Core,避免 InMemory provider 与真实 SQL 行为差异。
- 快照测试:dotnet add package Verify.Xunit,用 Verify 对比生成文件。
- 反模式清单与修复建议,如 DateTime.UtcNow、Task.Delay、测试间共享状态、模拟 DbContext、魔法字符串、注释掉测试等。
使用方式:按上述包名安装依赖,在测试中遵循 AAA 与命名约定,集成测试通过 WithWebHostBuilder 覆盖服务与数据库,数据库层测试用容器并重置状态。
适用场景:.NET 单元测试、API 集成测试、EF Core 数据访问测试与测试代码重构。
限制:资料未提供具体版本兼容范围、性能基准数据或收费信息;容器测试启动较慢(约 3–10 秒),需权衡真实性与速度。