変更で壊れる可能性のあるテストだけを実行します。
TestDetta は差分を読み取り、プロジェクト、シンボル、記録済みのカバレッジをたどって、その変更を検出できるテストクラスだけを実行します。確信が持てないときは、少なくではなく多めに実行します。
$ td test --base main -- -f net10.0td: 1 changed file(s), 1 affected test project(s).Tests to run: filtered src/Spectre.Console.Tests/Spectre.Console.Tests.csproj (14 of 141 test class(es) run or reference the changed code, 0.6 s of 3.0 s (80% saved))Recorded test time: 0.6 s of 3.4 s (83% saved).Passed! - Failed: 0, Passed: 156, Total: 156 - Spectre.Console.Tests.dlltd summary: passed src/Spectre.Console.Tests/Spectre.Console.Tests.csproj (14 class(es), 4.6 s)1 project(s) run, 0 failed, 0 skipped.# Spectre.Console への実際の変更: 実行の全体を見る
デモではなく、実際のコードで計測しています
人気のあるオープンソースの .NET ライブラリのメンバーを 1 つずつ変更し、失敗したテストクラスがすべて TestDetta によって選択されていたことを確認しています。
1 つのメンバーへの変更で実行されたテストクラスの割合は、中央値で 28% でした。差分からジョブサマリーまで、実際の実行例を見る →
選択のしくみ
各ステップは、根拠がある場合にのみ選択を絞り込みます。追跡できないものは、多めに実行する側にフォールバックします。
プロジェクト
変更されたファイルをプロジェクトに対応付け、ProjectReference をたどります。Directory.Build.props のようなビルド全体に関わるファイルは、その配下のすべてに影響します。
シンボル
C# の構文ツリーを比較するため、コメントや空白の編集では何も選択されず、TestDetta はどのメンバーが変更されたかを把握できます。
カバレッジ
既定のブランチで記録したマップが、どのテストクラスがどのメソッドを実行したかを示すため、変更されたメソッドから対応するクラスを直接選択できます。
名前
新しいコード、フィールド、定数は、テストクラスかマップが把握しているコードに到達するまで、ソース内を名前でたどります。
フォールバック
構成ファイル、グローバル using、リフレクションで検出される型など、変更を追跡できない場合はテストプロジェクト全体を実行します。
自己チェック
どのテストにも一致しないフィルターは TestDetta のバグとして扱い、フィルターなしでそのプロジェクトを再実行します。
GitHub Actions なら 2 ステップ
既定のブランチへのプッシュごとにカバレッジマップを記録します。プルリクエストでは最新のマップを復元して影響を受けるテストだけを実行し、各クラスが実行された理由やスキップされた理由をジョブサマリーに示します。
GitHub Actions ガイド →
GitLab CI、Jenkins、Azure DevOps、Bitbucket →
- if: github.event_name == 'push'
uses: <owner>/testdetta@<sha>
with:
mode: record
- if: github.event_name == 'pull_request'
uses: <owner>/testdetta@<sha>
with:
mode: test
license: ${{ secrets.TESTDETTA_LICENSE }}
テストの見逃しが許されないチームのために
コードは手元にとどまります
TestDetta は CI の中で動作します。ソース、カバレッジ、テスト結果がお使いのマシンの外に出ることはなく、コミッターのメールアドレスはローカルで数えるだけです。
お使いのすべてのフレームワークに対応
xUnit v2 と v3、NUnit、MSTest、TUnit に、VSTest と Microsoft.Testing.Platform の両方で対応し、それぞれの並列実行にも対応しています。
ビルドを止めません
有効なライセンスがない場合は、これまでどおりすべてのテストを実行します。ライセンスの問題で増えるのは CI の時間だけで、ビルドが失敗することはありません。