すべてが実行される変更
ほとんどの変更では、選択されるテストクラスはわずかです。しかし安全に絞り込めない変更もあり、その場合 TestDetta はテストプロジェクト全体、またはフォルダー配下のすべてのプロジェクトを実行します。このページではそうした変更をすべて挙げているので、選択が広くなっても驚くことはありません。
ビルド全体に関わるファイル
これらのファイルは、その配下にあるすべてのプロジェクトのビルド方法を変えます。いずれかを変更すると、そのフォルダーとその配下にあるすべてのテストプロジェクトが実行されます。
| ファイル | 実行されるもの |
|---|---|
Directory.Build.props、Directory.Build.targets、Directory.Build.rsp | 配下のすべてのテストプロジェクト |
Directory.Solution.props、Directory.Solution.targets | 配下のすべてのテストプロジェクト |
global.json、NuGet.config、.editorconfig | 配下のすべてのテストプロジェクト |
Directory.Packages.props(PackageVersion 項目だけが変更された場合) | 変更されたパッケージを参照するテストプロジェクトと、それに依存するテストプロジェクトだけ |
Directory.Packages.props(それ以外の変更:GlobalPackageReference、推移的なピン留め、プロパティ) | 配下のすべてのテストプロジェクト |
テストプロジェクト全体が実行される変更
| 変更 | 絞り込めない理由 |
|---|---|
プロジェクトファイル、またはそれがインポートする .props や .targets ファイル | プロジェクト内のあらゆるもののビルド方法を変えうるため。 |
プロジェクト内の C# 以外のファイル(appsettings.json、.resx、テストデータファイルなど) | 誰がそれを読み込むかを示すカバレッジマップがないため。 |
global using またはアセンブリ属性 | すべてのファイルに適用されるため。 |
| どの宣言にも属さないコードでの C# の変更(プリプロセッサ条件の下にあるコードなど) | たどるべきメンバーがないため。 |
| どこからも名前で参照されていないものの、フレームワークがリフレクションで検出しうる型の変更(コントローラー、メッセージハンドラー、EF の構成など) | 名前からもカバレッジからも、誰がそれを見つけるかわからないため。 |
| F# または Visual Basic のプロジェクトでの変更 | そのコードは分析されないため。 |
| アナライザーやソースジェネレーターとして使われるプロジェクト | 影響が呼び出しではなくコンパイルに及ぶため。 |
これらはいずれも、影響を受けたプロジェクトに依存するすべてのテストプロジェクトも実行します。
カバレッジマップの状況
- 古いマップと、その間のビルドの変更。マップがマージベースより数コミット古く、その間にビルドファイルや構成ファイルが変更されている場合、影響を受けるテストプロジェクトは丸ごと実行されます。
--drift-fallback nameを指定すると、代わりに名前で判断します。ドリフトブリッジを参照してください。 - すべてのクラスが選択された場合。すべてのクラスが選択されたプロジェクトは、フィルターなしで実行されます。
- 何にも一致しないフィルター。そのプロジェクトはフィルターなしで再実行され、TestDetta はこれを自身のバグとして扱います。
マップがまったくない場合でも、すべてが実行されるわけではありません。選択は名前によるトレースにフォールバックします。カバレッジよりは広くなりますが、それでも絞り込まれた選択です。
無視されるファイル
README.md、.github/ 配下のファイル、リポジトリのルートにあるスクリプトなど、すべてのプロジェクトフォルダーの外にある変更ファイルは、どのプロジェクトにも属さないため、何も選択しません。出力には、どこにも対応付けられなかったファイル(unmapped)として表示されます。
どのプロジェクトフォルダーにも属さないファイルをテストが読み込んでいる場合、そのファイルを変更してもテストは選択されません。こうしたファイルはテストプロジェクト内に置くか、<None Include="..\..\testdata\**" CopyToOutputDirectory="PreserveNewest" /> のようにプロジェクトの項目として指定してください。そうすれば、ファイルがどこにあってもそのプロジェクトに属し、変更や削除でプロジェクトが実行されます。
例外が 1 つあります。どのプロジェクトにも属さないソースファイルやビルドファイル(.cs、.fs、.vb、.props、.targets、.projitems)は、インポートを完全には解決できなかったすべてのプロジェクトのビルド入力とみなされ、それらのプロジェクトが実行されます。