トラブルシューティング

各項目は、目にした症状から始まります。どの場合も、-v を指定するとすべての判断とその理由が stderr に書き込まれます。ほとんどの疑問はこのログで解決でき、当社にお送りいただきたいのもこのログです。

td affected --base origin/main -v

テストプロジェクト全体が実行された

出力の中でそのプロジェクトを探してください。理由が横に表示されています。よくある原因は、ビルド全体に関わるファイル、プロジェクト内の C# 以外のファイル、global using、リフレクションで検出される型です。すべての原因はすべてが実行される変更に一覧があります。-v のログでは、affects whole project: True のような行にそのファイルが示されます。

カバレッジマップが使われなかった

マップがない場合、選択は名前によるトレースで行われ、範囲が広くなります。マップがなかった理由はログに示されます。

ベースコミットが見つからない

TestDetta はブランチをマージベースと比較するため、両方の履歴が必要です。アクションは次のメッセージで停止します。

TestDetta compares with a base commit and needs the full history. Use actions/checkout with fetch-depth: 0.

fetch-depth: 0 でチェックアウトしてください。ほかの CI システムでは、シャロークローンを無効にし、明示的な refspec でターゲットブランチをフェッチします。各システムでの方法はその他の CI システムを参照してください。

スキップされたテストが想定より少ない

フィルターがどのテストにも一致しなかった

プロジェクトのフィルターがどのテストも選択しなかった場合、TestDetta はフィルターなしでそのプロジェクトを再実行し、The filter for … matched no test; running it unfiltered とログに出力します。見逃しは生じませんが、これは当社側のバグです。-v のログをお送りください。

スカッシュマージ、リベース、フォースプッシュ

マップは既定のブランチのコミットに対して記録され、プルリクエストはマージベース時点またはそれ以前の最新のマップを探します。スカッシュマージやリベースを行うと既定のブランチに新しいコミットが作成されます。次のプッシュでそのコミットのマップが記録され、それまでの間、プルリクエストはドリフトブリッジを介して以前のマップを使用します。プルリクエストのブランチへのフォースプッシュでは何も変わりません。マージベースが計算し直されるだけです。

フォークからのプルリクエスト

CI システムは、フォークからのプルリクエストにシークレットを渡しません。パブリックリポジトリにはライセンスが不要なため、何も変わりません。プライベートリポジトリでは、ライセンスなしの実行となり、TestDetta がない場合と同じようにすべてのテストを実行します。

よくある質問

選択して実行した場合のコードカバレッジは完全ですか?

いいえ。テストをスキップした実行では、カバレッジは部分的になります。カバレッジは既定のブランチでの完全な実行から公開してください。そこでは記録がすべてのテストを実行します。

テストを再試行できますか?

はい。フレームワーク独自の再試行オプションを使ってください。-- 以降はすべてそのまま dotnet test に渡されます。

選択されたテストを並列ジョブに分割できますか?

td affected --format commands は、テストプロジェクトごとに 1 つ、フィルター付きの dotnet test コマンドを出力します。それらの行を各ジョブに割り振ってください。