用途:面向 .NET 项目编写 xUnit 测试,重点讲解 xUnit v3(.NET 8.0+ 基线),并内联标注与 v2 行为不同的兼容性说明。
主要能力:
- [Fact] 单用例;[Theory] 参数化,支持 [InlineData]、[MemberData](TheoryData<T>)、[ClassData](v3 用强类型 TheoryDataRow<T>,v2 用 IEnumerable<object[]>)。
- 夹具:IClassFixture<T> 用于单个测试类内共享昂贵资源,ICollectionFixture<T> 配合 [CollectionDefinition] 跨测试类共享。
- IAsyncLifetime 实现异步初始化/清理;v3 返回 ValueTask,v2 返回 Task。
- 并行执行:默认不同集合并行、集合内顺序;可用 DisableParallelization 或 xunit.runner.json(parallelizeAssembly、parallelizeTestCollections、maxParallelThreads)控制。
- 输出与断言:ITestOutputHelper 采集诊断输出,可桥接 ILogger;支持自定义断言,v3 新增 Assert.Multiple,且移除了 Assert 方法的消息参数,需用 Assert.Fail() 显式提示。
- xunit.analyzers 在编译期捕获常见测试编写错误,可用 .editorconfig 调整规则严重级别。
必要用法:测试方法返回 Task/ValueTask 而非 async void;夹具类需 public;[Collection] 必须与对应 [CollectionDefinition] 匹配;[Fact] 与 [Theory] 不可混用。
适用场景:单元测试与参数化测试、需要共享数据库连接或配置的测试类/集合、异步 setup/teardown、并行策略调整与测试诊断。
限制:不做测试项目脚手架、包引用与 Directory.Build.props(由 dotnet-add-testing 负责);不涉及测试策略与测试类型选择、集成测试模式(WebApplicationFactory、Testcontainers);需 .NET 8.0+ 基线以支持 v3。包与运行器差异:v3 使用 xunit.v3、xunit.runner.visualstudio 3.x,断言独立为 xunit.v3.assert。