mcpField
C
csharp-tunit

csharp-tunit

github.com/githubテスト・品質40.5k8.8k 回インストール今日更新
リポジトリ

csharp-tunit について

csharp-tunitは、.NETプロジェクトでTUnitのユニットテストを書くためのスキルです。テスト構成、アサーション、データ駆動テスト、ライフサイクルフック、xUnitからの移行を扱います。

主な機能

  1. 01AAAテスト構成
  2. 02非同期の流暢なアサーション
  3. 03データ駆動テストのパターン
  4. 04ライフサイクルと実行制御
  5. 05xUnit移行ガイド

活用シーン

  1. 01焦点を絞ったTUnitユニットテストの作成
  2. 02インラインまたはメソッド形式のテストデータ追加
  3. 03セットアップと後処理フックの管理
  4. 04xUnitテストのTUnitへの移行

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/csharp-tunitを入力して読み込まれたか確認します。

詳細

TUnit ベストプラクティス

あなたの目標は、標準的なテストとデータ駆動型テストの両方のアプローチをカバーし、TUnit で効果的な単体テストを書く手助けをすることです。

プロジェクトのセットアップ

  • [ProjectName].Tests という命名規則で別のテストプロジェクトを使用する
  • 流暢なアサーションのために TUnit パッケージと TUnit.Assertions を参照する
  • テスト対象のクラスに対応するテストクラスを作成する (例: Calculator に対する CalculatorTests)
  • .NET SDK のテストコマンドを使用する: テストの実行には dotnet test
  • TUnit には .NET 8.0 以上が必要です

テスト構造

  • テストクラスの属性は不要です (xUnit/NUnit のような)
  • テストメソッドには [Test] 属性を使用する (xUnit の [Fact] ではありません)
  • Arrange-Act-Assert (AAA) パターンに従う
  • テストの命名には MethodName_Scenario_ExpectedBehavior というパターンを使用する
  • ライフサイクルフックを使用する: セットアップには [Before(Test)]、ティアダウンには [After(Test)]
  • クラス内のテスト間で共有するコンテキストには [Before(Class)] と [After(Class)] を使用する
  • テストクラス間で共有するコンテキストには [Before(Assembly)] と [After(Assembly)] を使用する
  • TUnit は [Before(TestSession)] や [After(TestSession)] のような高度なライフサイクルフックをサポートしています

標準的なテスト

  • テストは単一の振る舞いに集中させる
  • 1 つのテストメソッドで複数の振る舞いをテストすることは避ける
  • await Assert.That() を使った TUnit の流暢なアサーション構文を使用する
  • テストケースを検証するために必要なアサーションのみを含める
  • テストを独立させ、冪等にする (どの順序でも実行可能)
  • テスト間の相互依存を避ける (必要な場合は [DependsOn] 属性を使用する)

データ駆動型テスト

  • インラインのテストデータには [Arguments] 属性を使用する (xUnit の [InlineData] に相当)
  • メソッドベースのテストデータには [MethodData] を使用する (xUnit の [MemberData] に相当)
  • クラスベースのテストデータには [ClassData] を使用する
  • ITestDataSource を実装してカスタムデータソースを作成する
  • データ駆動型テストでは意味のあるパラメーター名を使用する
  • 複数の [Arguments] 属性を同じテストメソッドに適用できます

アサーション

  • 値の等価性には await Assert.That(value).IsEqualTo(expected) を使用する
  • 参照の等価性には await Assert.That(value).IsSameReferenceAs(expected) を使用する
  • ブール条件には await Assert.That(value).IsTrue() または await Assert.That(value).IsFalse() を使用する
  • コレクションには await Assert.That(collection).Contains(item) または await Assert.That(collection).DoesNotContain(item) を使用する
  • 正規表現パターンマッチングには await Assert.That(value).Matches(pattern) を使用する
  • 例外をテストするには await Assert.That(action).Throws<TException>() または await Assert.That(asyncAction).ThrowsAsync<TException>() を使用する
  • .And 演算子でアサーションを連結する: await Assert.That(value).IsNotNull().And.IsEqualTo(expected)
  • 代替条件には .Or 演算子を使用する: await Assert.That(value).IsEqualTo(1).Or.IsEqualTo(2)
  • 許容範囲を伴う DateTime と数値の比較には .Within(tolerance) を使用する
  • すべてのアサーションは非同期であり、await する必要があります

高度な機能

  • テストを複数回繰り返すには [Repeat(n)] を使用する
  • 失敗時の自動リトライには [Retry(n)] を使用する
  • 並列実行の制限を制御するには [ParallelLimit<T>] を使用する
  • 条件付きでテストをスキップするには [Skip("reason")] を使用する
  • テストの依存関係を作成するには [DependsOn(nameof(OtherTest))] を使用する
  • テストのタイムアウトを設定するには [Timeout(milliseconds)] を使用する
  • TUnit の基本属性を拡張してカスタム属性を作成する

テストの整理

  • 機能またはコンポーネントごとにテストをグループ化する
  • テストのカテゴリ分けには [Category("CategoryName")] を使用する
  • カスタムテスト名には [DisplayName("Custom Test Name")] を使用する
  • テストの診断と情報のために TestContext の使用を検討する
  • プラットフォーム固有のテストにはカスタムの [WindowsOnly] のような条件付き属性を使用する

パフォーマンスと並列実行

  • TUnit はデフォルトでテストを並列実行します(明示的な設定が必要な xUnit とは異なります)
  • 特定のテストで並列実行を無効にするには [NotInParallel] を使用します
  • カスタムの制限クラスとともに [ParallelLimit<T>] を使用して、同時実行数を制御します
  • 同じクラス内のテストはデフォルトで順次実行されます
  • 負荷テストのシナリオでは、[ParallelLimit<T>] とともに [Repeat(n)] を使用します

xUnit からの移行

  • [Fact] を [Test] に置き換えます
  • [Theory] を [Test] に置き換え、データには [Arguments] を使用します
  • [InlineData] を [Arguments] に置き換えます
  • [MemberData] を [MethodData] に置き換えます
  • Assert.Equal を await Assert.That(actual).IsEqualTo(expected) に置き換えます
  • Assert.True を await Assert.That(condition).IsTrue() に置き換えます
  • Assert.Throws<T> を await Assert.That(action).Throws<T>() に置き換えます
  • コンストラクター/IDisposable を [Before(Test)]/[After(Test)] に置き換えます
  • IClassFixture<T> を [Before(Class)]/[After(Class)] に置き換えます

xUnit ではなく TUnit を選ぶ理由

TUnit は、モダンで高速、かつ柔軟なテスト体験を提供し、非同期アサーション、より洗練されたライフサイクルフック、改善されたデータ駆動型テスト機能など、xUnit にはない高度な機能を備えています。TUnit の流暢なアサーションは、より明確で表現力豊かなテスト検証を提供し、複雑な .NET プロジェクトに特に適しています。

コメント