Agent Skillsitsfatduck/optimizerDuck › csharp-xunit

csharp-xunit

GitHub

提供XUnit单元测试最佳实践,涵盖项目配置、AAA模式、数据驱动测试及断言技巧。

.agents/skills/csharp-xunit/SKILL.md itsfatduck/optimizerDuck

触发场景

编写C#单元测试 配置XUnit测试环境 优化测试用例结构

安装

npx skills add itsfatduck/optimizerDuck --skill csharp-xunit -g -y
更多选项

非标准路径

npx skills add https://github.com/itsfatduck/optimizerDuck/tree/master/.agents/skills/csharp-xunit -g -y

不安装直接使用

npx skills use itsfatduck/optimizerDuck@csharp-xunit

指定 Agent (Claude Code)

npx skills add itsfatduck/optimizerDuck --skill csharp-xunit -a claude-code -g -y

安装 repo 全部 skill

npx skills add itsfatduck/optimizerDuck --all -g -y

预览 repo 内 skill

npx skills add itsfatduck/optimizerDuck --list

SKILL.md

Frontmatter
{
    "name": "csharp-xunit",
    "description": "Get best practices for XUnit unit testing, including data-driven tests"
}

XUnit Best Practices

Your goal is to help me write effective unit tests with XUnit, covering both standard and data-driven testing approaches.

Project Setup

  • Use a separate test project with naming convention [ProjectName].Tests
  • Reference Microsoft.NET.Test.Sdk, xunit, and xunit.runner.visualstudio packages
  • Create test classes that match the classes being tested (e.g., CalculatorTests for Calculator)
  • Use .NET SDK test commands: dotnet test for running tests

Test Structure

  • No test class attributes required (unlike MSTest/NUnit)
  • Use fact-based tests with [Fact] attribute for simple tests
  • Follow the Arrange-Act-Assert (AAA) pattern
  • Name tests using the pattern MethodName_Scenario_ExpectedBehavior
  • Use constructor for setup and IDisposable.Dispose() for teardown
  • Use IClassFixture<T> for shared context between tests in a class
  • Use ICollectionFixture<T> for shared context between multiple test classes

Standard Tests

  • Keep tests focused on a single behavior
  • Avoid testing multiple behaviors in one test method
  • Use clear assertions that express intent
  • Include only the assertions needed to verify the test case
  • Make tests independent and idempotent (can run in any order)
  • Avoid test interdependencies

Data-Driven Tests

  • Use [Theory] combined with data source attributes
  • Use [InlineData] for inline test data
  • Use [MemberData] for method-based test data
  • Use [ClassData] for class-based test data
  • Create custom data attributes by implementing DataAttribute
  • Use meaningful parameter names in data-driven tests

Assertions

  • Use Assert.Equal for value equality
  • Use Assert.Same for reference equality
  • Use Assert.True/Assert.False for boolean conditions
  • Use Assert.Contains/Assert.DoesNotContain for collections
  • Use Assert.Matches/Assert.DoesNotMatch for regex pattern matching
  • Use Assert.Throws<T> or await Assert.ThrowsAsync<T> to test exceptions
  • Use fluent assertions library for more readable assertions

Mocking and Isolation

  • Consider using Moq or NSubstitute alongside XUnit
  • Mock dependencies to isolate units under test
  • Use interfaces to facilitate mocking
  • Consider using a DI container for complex test setups

Test Organization

  • Group tests by feature or component
  • Use [Trait("Category", "CategoryName")] for categorization
  • Use collection fixtures to group tests with shared dependencies
  • Consider output helpers (ITestOutputHelper) for test diagnostics
  • Skip tests conditionally with Skip = "reason" in fact/theory attributes

版本历史

  • b472afe 当前 2026-07-06 00:02

同 Skill 集合

.agents/skills/brainstorming/SKILL.md
.agents/skills/csharp-docs/SKILL.md
.agents/skills/dotnet-best-practices/SKILL.md
.agents/skills/microsoft-docs/SKILL.md
.agents/skills/powershell-windows/SKILL.md
.agents/skills/using-superpowers/SKILL.md
.agents/skills/windows-app-developer/SKILL.md
.agents/skills/csharp-async/SKILL.md
.agents/skills/resx-translation/SKILL.md

元信息

文件数
0
版本
ef56395
Hash
7a2d020e
收录时间
2026-07-06 00:02

首页 - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-05 04:31
浙ICP备14020137号-1 $访客地图$