mcpField
C
csharp-nunit

csharp-nunit

github.com/github测试与质量40.5k9.0k 次安装1 天前更新
代码仓库

关于 csharp-nunit

面向 .NET 开发者的 NUnit 单元测试编写指南,涵盖常规测试与数据驱动测试,并提供结构、断言、隔离和组织方面的约定。

主要功能

  1. 01AAA 测试结构
  2. 02测试命名与 Fixture 约定
  3. 03数据驱动测试属性
  4. 04断言使用建议
  5. 05Setup 与 Teardown 模式
  6. 06模拟依赖与测试隔离

适用场景

  1. 01创建独立的 NUnit 测试项目
  2. 02为 .NET 代码编写聚焦的单元测试
  3. 03添加参数化测试用例
  4. 04组织跨测试的 Setup 与 Teardown

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/github/awesome-copilot --skill csharp-nunit

安装后在 Claude Code 中输入/csharp-nunit确认已加载。

详细介绍

NUnit 最佳实践

你的目标是帮助我使用 NUnit 编写有效的单元测试,涵盖标准测试和数据驱动测试两种方式。

项目设置

  • 使用单独的测试项目,命名约定为 [ProjectName].Tests
  • 引用 Microsoft.NET.Test.Sdk、NUnit 和 NUnit3TestAdapter 包
  • 创建与被测类匹配的测试类(例如,为 Calculator 创建 CalculatorTests)
  • 使用 .NET SDK 测试命令:dotnet test 来运行测试

测试结构

  • 将 [TestFixture] 特性应用于测试类
  • 将 [Test] 特性用于测试方法
  • 遵循 Arrange-Act-Assert(AAA)模式
  • 使用 MethodName_Scenario_ExpectedBehavior 模式命名测试
  • 使用 [SetUp] 和 [TearDown] 进行每个测试的 setup 和 teardown
  • 使用 [OneTimeSetUp] 和 [OneTimeTearDown] 进行每个类的 setup 和 teardown
  • 使用 [SetUpFixture] 进行程序集级别的 setup 和 teardown

标准测试

  • 保持测试聚焦于单一行为
  • 避免在一个测试方法中测试多个行为
  • 使用表达意图的清晰断言
  • 仅包含验证测试用例所需的断言
  • 使测试独立且幂等(可以按任意顺序运行)
  • 避免测试间的相互依赖

数据驱动测试

  • 使用 [TestCase] 提供内联测试数据
  • 使用 [TestCaseSource] 提供以编程方式生成的测试数据
  • 使用 [Values] 提供简单的参数组合
  • 使用 [ValueSource] 提供基于属性或方法的数据源
  • 使用 [Random] 生成随机数值测试值
  • 使用 [Range] 生成顺序数值测试值
  • 使用 [Combinatorial] 或 [Pairwise] 组合多个参数

断言

  • 使用 Assert.That 配合约束模型(首选的 NUnit 风格)
  • 使用 Is.EqualTo、Is.SameAs、Contains.Item 等约束
  • 使用 Assert.AreEqual 进行简单的值相等比较(经典风格)
  • 使用 CollectionAssert 进行集合比较
  • 使用 StringAssert 进行字符串特定的断言
  • 使用 Assert.Throws<T> 或 Assert.ThrowsAsync<T> 测试异常
  • 在断言中使用描述性消息,以便在失败时更清晰

Mock 与隔离

  • 考虑将 Moq 或 NSubstitute 与 NUnit 一起使用
  • Mock 依赖项以隔离被测单元
  • 使用接口以便于 Mock
  • 考虑使用 DI 容器处理复杂的测试设置

测试组织

  • 按功能或组件对测试进行分组
  • 使用 [Category("CategoryName")] 进行分类
  • 在必要时使用 [Order] 控制测试执行顺序
  • 使用 [Author("DeveloperName")] 表明归属
  • 使用 [Description] 提供额外的测试信息
  • 对于不应自动运行的测试,考虑使用 [Explicit]
  • 使用 [Ignore("Reason")] 临时跳过测试

评论

支持 Markdown