mcpField
C
csharp-xunit

csharp-xunit

github.com/github测试与质量40.5k10.3k 次安装今天更新
代码仓库

关于 csharp-xunit

为 .NET 单元测试提供 XUnit 实践指导,内容涵盖项目配置、测试结构、数据驱动用例、断言与隔离,适合编写可维护测试的开发者。

主要功能

  1. 01测试项目配置指导
  2. 02Arrange-Act-Assert 测试结构
  3. 03Fact 与 Theory 测试模式
  4. 04参数化测试的数据源
  5. 05断言、模拟与 Fixture

适用场景

  1. 01配置 .NET 测试项目
  2. 02编写专注的单元测试
  3. 03通过数据测试多种输入

安装

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

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

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

详细介绍

XUnit 最佳实践

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

项目设置

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

测试结构

  • 不需要测试类特性(与 MSTest/NUnit 不同)
  • 使用基于事实的测试,对简单测试使用 [Fact] 特性
  • 遵循 Arrange-Act-Assert (AAA) 模式
  • 使用 MethodName_Scenario_ExpectedBehavior 模式命名测试
  • 使用构造函数进行设置,使用 IDisposable.Dispose() 进行清理
  • 使用 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> 测试异常
  • 使用 fluent assertions 库获得更可读的断言

Mock 与隔离

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

测试组织

  • 按功能或组件分组测试
  • 使用 [Trait("Category", "CategoryName")] 进行分类
  • 使用集合 fixture 对具有共享依赖项的测试进行分组
  • 考虑使用输出辅助工具 (ITestOutputHelper) 进行测试诊断
  • 使用 fact/theory 特性中的 Skip = "reason" 有条件地跳过测试

评论

支持 Markdown