csharp-xunit について
.NET のユニットテスト向けに、XUnit のプロジェクト設定、テスト構成、データ駆動テスト、アサーション、分離の実践方法を案内するスキルです。保守しやすいテストを書く開発者向けです。
主な機能
- 01テストプロジェクトの設定案内
- 02Arrange-Act-Assert の構成
- 03Fact と Theory のテストパターン
- 04パラメーター化テストのデータソース
- 05アサーション、モック、フィクスチャ
活用シーン
- 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>を使用します
標準的なテスト
- テストは単一の振る舞いに焦点を当てます
- 1 つのテストメソッドで複数の振る舞いをテストすることは避けます
- 意図を表現する明確なアサーションを使用します
- テストケースを検証するために必要なアサーションのみを含めます
- テストを独立させ、冪等にします(どの順序でも実行できます)
- テスト間の相互依存は避けます
データ駆動型テスト
[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 ライブラリを使用します
モックと分離
- XUnit と併用して Moq や NSubstitute の使用を検討します
- テスト対象のユニットを分離するために依存関係をモックします
- モックを容易にするためにインターフェイスを使用します
- 複雑なテストセットアップには DI コンテナーの使用を検討します
テストの整理
- 機能またはコンポーネントごとにテストをグループ化します
- 分類には
[Trait("Category", "CategoryName")]を使用します - 共有依存関係を持つテストをグループ化するにはコレクションフィクスチャを使用します
- テストの診断には出力ヘルパー(
ITestOutputHelper)を検討します - fact/theory 属性で
Skip = "reason"を使用して条件付きでテストをスキップします
コメント
Markdown 対応