SuperAPI AI 工具集

dotnet-testing-patterns

测试与质量

查看项目

更新于 10-16 06:52

技能介绍

用途:为 .NET 项目提供测试设计层面的模式与规范,聚焦测试结构、模拟、断言、数据构造与集成测试写法;运行器配置(xUnit v2/v3、VSTest/MTP)由 xunit 技能负责,两者可并行使用。

主要能力:

  1. AAA 结构:每个测试一个逻辑断言,命名采用 Method_Scenario_ExpectedBehavior 或 Should_X_When_Y,测试内不写 if/else、不 sleep。
  2. 模拟库选择:Moq(生态大、语法冗长)、NSubstitute(语法简洁,推荐新项目)、FakeItEasy;给出 NSubstitute 与 Moq 的 Setup/Verify 写法示例。
  3. FluentAssertions:dotnet add package FluentAssertions,用 Should() 替代内置断言,支持集合、对象等价比较与异常断言。
  4. Test Data Builder:数据准备重复时改为链式 Builder,并提供隐式转换用法。
  5. Bogus:dotnet add package Bogus,用 Faker<T> 生成真实感假数据,适合种子数据与批量记录。
  6. 时间抽象:.NET 8+ 注入 TimeProvider,测试用 FakeTimeProvider,包为 Microsoft.Extensions.TimeProvider.Testing。
  7. 集成测试:WebApplicationFactory<Program> 覆盖中间件、路由、DI、控制器,可替换服务与数据库;Program 需声明为 partial。
  8. Testcontainers:dotnet add package Testcontainers.MsSql(或 PostgreSql、MySql、Redis),用真实数据库容器测试 EF Core,避免 InMemory provider 与真实 SQL 行为差异。
  9. 快照测试:dotnet add package Verify.Xunit,用 Verify 对比生成文件。
  10. 反模式清单与修复建议,如 DateTime.UtcNow、Task.Delay、测试间共享状态、模拟 DbContext、魔法字符串、注释掉测试等。

使用方式:按上述包名安装依赖,在测试中遵循 AAA 与命名约定,集成测试通过 WithWebHostBuilder 覆盖服务与数据库,数据库层测试用容器并重置状态。

适用场景:.NET 单元测试、API 集成测试、EF Core 数据访问测试与测试代码重构。

限制:资料未提供具体版本兼容范围、性能基准数据或收费信息;容器测试启动较慢(约 3–10 秒),需权衡真实性与速度。