关于 csharp-xunit
为 .NET 单元测试提供 XUnit 实践指导,内容涵盖项目配置、测试结构、数据驱动用例、断言与隔离,适合编写可维护测试的开发者。
主要功能
- 01测试项目配置指导
- 02Arrange-Act-Assert 测试结构
- 03Fact 与 Theory 测试模式
- 04参数化测试的数据源
- 05断言、模拟与 Fixture
适用场景
- 01配置 .NET 测试项目
- 02编写专注的单元测试
- 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