SuperAPI AI 工具集

csharp-xunit

测试与质量

查看项目

更新于 10-16 06:47

技能介绍

用途:帮助在 .NET 项目中用 XUnit 编写有效的单元测试,涵盖标准测试与数据驱动测试两种方式。

项目搭建:使用独立的测试项目,命名约定为 [ProjectName].Tests;引用 Microsoft.NET.Test.Sdk、xunit 和 xunit.runner.visualstudio 包;测试类与被测类对应(如 CalculatorTests 对应 Calculator);用 dotnet test 运行测试。

测试结构:XUnit 不需要测试类特性;简单测试用 [Fact];遵循 Arrange-Act-Assert(AAA)模式;命名采用 MethodName_Scenario_ExpectedBehavior;用构造函数做 setup,用 IDisposable.Dispose() 做 teardown;类内共享上下文用 IClassFixture<T>,多个测试类共享用 ICollectionFixture<T>。

标准测试:每个测试聚焦单一行为,避免一个方法测多个行为;断言清晰表达意图,只包含验证该用例所需的断言;测试应独立且幂等,可任意顺序运行,避免相互依赖。

数据驱动测试:用 [Theory] 配合数据源特性;[InlineData] 提供内联数据,[MemberData] 提供基于方法的数据,[ClassData] 提供基于类的数据;可实现 DataAttribute 创建自定义数据特性;参数命名要有意义。

断言:值相等用 Assert.Equal,引用相等用 Assert.Same,布尔条件用 Assert.True/Assert.False,集合用 Assert.Contains/Assert.DoesNotContain,正则用 Assert.Matches/Assert.DoesNotMatch,异常用 Assert.Throws<T> 或 await Assert.ThrowsAsync<T>;也可使用流式断言库提升可读性。

Mock 与隔离:可配合 Moq 或 NSubstitute;Mock 依赖以隔离被测单元;用接口便于 Mock;复杂测试环境可考虑 DI 容器。

测试组织:按功能或组件分组;用 [Trait("Category", "CategoryName")] 分类;用 collection fixture 组织共享依赖的测试;可用 ITestOutputHelper 输出诊断信息;在 fact/theory 特性中用 Skip = "reason" 有条件跳过测试。

限制:资料未提供具体版本要求、性能数据或收费信息。