SuperAPI AI 工具集

dotnet-xunit

测试与质量

查看项目

更新于 10-16 07:23

技能介绍

用途:指导在 .NET(v3 基线 .NET 8.0+)项目中用 xUnit 编写单元测试,聚焦 v3 特性并给出与 v2 的差异说明。

主要能力:

  1. 测试特性:[Fact] 用于无参测试;[Theory] 配合 [InlineData]、[MemberData](支持 TheoryData<T>)、[ClassData](v3 用强类型 TheoryDataRow<T>)实现参数化。
  2. 测试夹具:IClassFixture 在同一测试类内共享昂贵资源,ICollectionFixture 配合 [CollectionDefinition]/[Collection] 跨测试类共享。
  3. 异步生命周期:IAsyncLifetime 的 InitializeAsync/DisposeAsync 在 v3 返回 ValueTask(v2 为 Task),可用于类级与逐测试的异步建/拆。
  4. 并行执行:默认按集合并行、集合内顺序执行;可用 [CollectionDefinition(..., DisableParallelization = true)] 禁用特定集合并行,或通过 xunit.runner.json(parallelizeAssembly、parallelizeTestCollections、maxParallelThreads)配置。
  5. 输出与日志:通过构造函数注入 ITestOutputHelper 输出诊断信息;可编写 ILoggerProvider 适配器将 ILogger 日志写入测试输出。
  6. 断言:自定义断言辅助类;v3 新增 Assert.Multiple 可聚合多条断言。
  7. 分析器:xunit.analyzers 在编译期提示常见错误,如 xUnit1004、xUnit1012、xUnit1025、xUnit2000 等,可在 .editorconfig 中调整严重级别。

版本差异要点:包名 v2 为 xunit,v3 为 xunit.v3;断言包在 v3 拆分为 xunit.v3.assert(或 xunit.v3.assert.source);v3 移除了 Assert 方法上的可选消息参数,改用自定义断言或 Assert.Fail()。

使用方式:需已通过 dotnet-add-testing 搭建测试项目并引用 xUnit 包,可用 dotnet-version-detection 确认 .NET 8.0+;xunit.runner.json 需设为 CopyToOutputDirectory=PreserveNewest。

限制与范围外:不涉及测试项目脚手架、测试策略决策、集成测试(WebApplicationFactory、Testcontainers)、Verify 快照测试。入门提示:夹具类须为 public 且有公共无参构造函数;构造函数注入的 ITestOutputHelper 不可用于静态成员;不要在同一方法同时标注 [Fact] 与 [Theory];异步测试应返回 Task 而非 void。