mcpField
C
csharp-xunit

csharp-xunit

github.com/midudev测试与质量7.0k57 次安装1 周前更新
代码仓库

关于 csharp-xunit

面向 C# 开发者的 xUnit 单元测试实践指南,介绍测试结构、Fixture、数据驱动测试、断言及使用模拟对象隔离依赖。

主要功能

  1. 01xUnit 项目配置
  2. 02Fact 与 AAA 测试结构
  3. 03Fixture 与测试生命周期
  4. 04Theory 和数据源模式
  5. 05断言与异常测试
  6. 06模拟对象与测试组织

适用场景

  1. 01配置 .NET xUnit 测试项目
  2. 02使用 Fixture 共享上下文
  3. 03编写参数化测试
  4. 04通过模拟依赖隔离单元

安装

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

$npx skills add https://github.com/midudev/autoskills --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