用途:帮助编写基于 NUnit 的 C# 单元测试,覆盖标准测试与数据驱动测试两类写法。
项目设置:使用独立测试项目,命名约定为 [ProjectName].Tests;引用 Microsoft.NET.Test.Sdk、NUnit 和 NUnit3TestAdapter 包;测试类与被测类对应(如 CalculatorTests 对应 Calculator);用 dotnet test 运行测试。
测试结构:测试类加 [TestFixture],测试方法加 [Test];遵循 Arrange-Act-Assert(AAA)模式;命名采用 MethodName_Scenario_ExpectedBehavior;用 [SetUp]/[TearDown] 做每个测试的初始化与清理,[OneTimeSetUp]/[OneTimeTearDown] 做每个类的初始化与清理,[SetUpFixture] 做程序集级初始化与清理。
标准测试:每个测试只聚焦单一行为,避免一个方法测多个行为;断言要表达意图,只包含验证该用例所需的断言;测试应独立且幂等,可任意顺序运行,避免相互依赖。
数据驱动测试:用 [TestCase] 提供内联数据,[TestCaseSource] 提供程序化生成的数据,[Values] 做简单参数组合,[ValueSource] 使用属性或方法数据源,[Random] 生成随机数值,[Range] 生成顺序数值,[Combinatorial] 或 [Pairwise] 组合多个参数。
断言:优先使用 Assert.That 配合约束模型,如 Is.EqualTo、Is.SameAs、Contains.Item;简单值相等可用 Assert.AreEqual;集合比较用 CollectionAssert,字符串断言用 StringAssert;用 Assert.Throws<T> 或 Assert.ThrowsAsync<T> 测试异常;断言中可加描述性消息便于定位失败。
Mock 与隔离:可配合 Moq 或 NSubstitute;通过 Mock 依赖隔离被测单元;用接口便于 Mock;复杂测试设置可考虑 DI 容器。
测试组织:按功能或组件分组;用 [Category("CategoryName")] 分类;必要时用 [Order] 控制执行顺序;用 [Author("DeveloperName")] 标注归属;用 [Description] 补充说明;不应自动运行的测试用 [Explicit];临时跳过用 [Ignore("Reason")]。
限制:资料未提供具体版本要求、性能数据或收费信息。