csharp-tunit
TUnitを使ったユニットテストのベストプラクティスを提供します。データ駆動テストの実装方法を含む、C#テストコードの品質向上に役立つガイダンスが得られます。
description の原文を見る
Get best practices for TUnit unit testing, including data-driven tests
SKILL.md 本文
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>]を使用 - 同じクラス内のテストはデフォルトで順序実行
- ロードテストのシナリオでは
[Repeat(n)]と[ParallelLimit<T>]を使用
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 プロジェクトに特に適しています。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- github
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/github/awesome-copilot / ライセンス: MIT
関連スキル
hugging-face-trackio
Trackioを使用してMLトレーニング実験を追跡・可視化できます。トレーニング中のメトリクスログ記録(Python API)、トレーニング診断のアラート発火、ログされたメトリクスの取得・分析(CLI)が必要な場合に活用してください。リアルタイムダッシュボード表示、Webhookを使用したアラート、HF Space同期、自動化向けのJSON出力に対応しています。
btc-bottom-model
ビットコインのサイクルタイミングモデルで、加重スコアリングシステムを搭載しています。日次パルス(4指標、32ポイント)とウィークリー構造(9指標、68ポイント)の2カテゴリーにわたる13の指標を追跡し、0~100のマーケットヒートスコアを算出します。ETFフロー、ファンディングレート、ロング/ショート比率、恐怖・貪欲指数、LTH-MVRV、NUPL、SOPR(LTH+STH)、LTH供給率、移動平均倍率(365日MA、200週MA)、週次RSI、出来高トレンドに対応します。市場サイクル全体を通じて買いと売りの両方の推奨を提供します。ビットコインの底値拾い、BTCサイクルポジション、買い時・売り時、オンチェーン指標、MVRV、NUPL、SOPR、LTH動向、ETFの流出入、ファンディングレート、恐怖指数、ビットコインが過熱状態か、マイナーコスト、暗号資産市場のセンチメント、BTCのポジションサイジング、「今ビットコインを買うべきか」「BTCが天井をつけているか」「オンチェーン指標は何を示しているか」といった質問の際にこのスキルを活用します。
protein_solubility_optimization
タンパク質の溶解性最適化 - タンパク質の溶解性を最適化します。タンパク質の特性を計算し、溶解性と親水性を予測し、有効な変異を提案します。タンパク質配列の特性計算、タンパク質機能の予測、親水性計算、ゼロショット配列予測を含むタンパク質エンジニアリング業務に使用できます。3つのSCPサーバーから4つのツールを統合しています。
research-lookup
Parallel Chat APIまたはPerplexity sonar-pro-searchを使用して、最新の研究情報を検索できます。学術論文の検索にも対応しています。クエリは自動的に最適なバックエンドにルーティングされるため、論文の検索、研究データの収集、科学情報の検証に活用できます。
tree-formatting
ggtree(R)またはiTOL(ウェブ)を使用して、系統樹の可視化とフォーマットを行います。系統樹を図として描画する際、ツリーレイアウトの選択、分類学に基づく枝やラベルの色付け、クレードの折りたたみ、サポート値の表示、またはツリーへのオーバーレイ追加が必要な場合に使用してください。系統推定(protein-phylogenyスキルを使用)やドメイン注釈(今後の独立したスキル)には使用しないでください。
querying-indonesian-gov-data
インドネシア政府の50以上のAPIとデータソースに接続できます。BPJPH(ハラール認証)、BOM(食品安全)、OJK(金融適正性)、BPS(統計)、BMKG(気象・地震)、インドネシア中央銀行(為替レート)、IDX(株式)、CKAN公開データポータル、pasal.id(第三者法MCP)に対応しています。インドネシア政府データを活用したアプリ開発、.go.idウェブサイトのスクレイピング、ハラール認証の確認、企業の法的適正性の検証、金融機関ステータスの照会、またはインドネシアMCPサーバーへの接続時に使用できます。CSRF処理、CKAN API使用方法、IP制限回避など、すぐに実行可能なPythonパターンを含んでいます。