ホット リロードを使用したテストの実行

Visual Studio でテストを実行する場合は、プロジェクトをビルドしてディスク上のバイナリを更新してから、テスト プラットフォームを使用してテストを実行します。 Visual Studio 内でのビルド時間は、コードに加えられた変更の種類によって異なることがあります。 大規模なソリューションの場合、ビルドはテストの実行の中で最もコストのかかる部分になる可能性があります。 Visual Studio 2022 以降では、ホット リロードを使用したテストの実行を有効にして、サポートされているシナリオのビルドをスキップすることでテストの実行を高速化することができます。

サポート対象

  • .NET 6.0 以降を対象とする C# および VB プロジェクト
  • DEBUG 構成用にビルドされたテスト プロジェクト
  • Visual Studio 2022 以降

ホット リロードを使用したテストの実行を有効にする

この機能を有効にするには、[テスト]>[オプション]>[(Experimental) Enable Hot Reloaded Test Runs for C# and VB test projects targeting .NET 6 and higher]\((試験段階) .NET 6 以降をターゲットとする C# と VB テスト プロジェクトのホット リロード テストの実行を有効にします\) を選択します。 Screenshot of the Enable Hot Reloaded Test Runs button on the Visual Studio Test Options page. When this is selected, tests execution will use hot reload for supported scenarios

試験段階である理由

これは新しいテストの実行方法であり、コードの検証において広く使用されている道筋が変更されます。 また、ユーザーからさらなるフィードバックを受け取ることにより、この機能に関するユーザー エクスペリエンスが変更されることも期待しています。 これら 2 つの理由から、現時点ではこの機能に "試験段階" というラベルが付けられています。

しくみ

このオプションを有効にすると、テスト エクスプローラーによって、可能な場合はホット リロードを使用したテストの実行が自動的に使用されます。 ホット リロードが不可能な場合は、テストをビルドして実行する通常の動作に戻ります。 テストを実行するユーザーが、ワークフローに変更を加える必要はありません (つまり、コードの編集とテストの実行を続行します)。

内部的には、新しくリリースされた C# および VB コードを実行時に編集するためのホット リロード エクスペリエンスに存在するのと同じ編集および続行のインフラストラクチャを使用して、加えられた変更が判断されます。 このため、ホット リロードが行われるのは "Rude 編集" が存在しない場合のみであり、その場合はテストを実行する前のテストのビルドに戻ります。 サポートされている編集の詳細については、編集と続行に関するドキュメントを参照してください

テストの実行はどのくらい速くなるか

この機能によってどのくらいの時間が節約されるかを見積もる際は、多くの変数が関与します。 たとえば次のような点です。

  • プロジェクトのビルドにかかる時間。
  • どのような種類の編集が行われたか。
  • 編集が行われたファイルの大きさ。
  • 編集が行われた場所 (リーフ プロジェクトだったかどうか)。

結局のところ、速度の向上は、その特定のテストの実行で発生したビルドの時間に直接関係します。

メモ

  • オプションを有効にした後、または Visual Studio を開いた後の最初のテストの実行では、プロジェクトのビルドが発生します。
  • テストの実行時に、エディター内のファイルが保存されない場合があります。 これを解決するため、またチェックインする前に、フル ビルド (Ctrl + Shift + B キー) を実行するようにしてください。
  • ホット リロード テストの実行が発生しても、ディスク上のバイナリは更新されません。
  • ホット リロード テストの実行は、テスト エクスプローラーの [テスト]>[すべてのテストを実行][Run All Tests in View]\(ビュー内のすべてのテストを実行\) では機能せず、ソリューション エクスプローラーのソリューション ノードからの [すべてのテストを実行] でも機能しません。 この機能はそれらのコマンドでは機能しません。それらでは現在、ソリューション全体のビルドが保証されているためです。
  • サポートされていないターゲット フレームワーク (.NET 6.0 より低い) でテストを実行すると、プロジェクトのビルドが発生します。
  • ディスク上の内容とテスト エクスプローラーに表示される内容の間に不整合がある場合は、Ctrl + Shift + B キーを使用してソリューションやプロジェクトをビルドしてからテストを実行することを検討してください。 明示的なビルドでは、ホット リロードのテスト結果が、通常のフル ビルドのテスト結果に置き換えられます。

既知の問題

  • 次のシナリオでは、ホット リロードを使用したテストの実行は行われません。
    • コード カバレッジ
    • ライブ単体テスト
    • プロファイリング
    • デバッグ
  • 読み取り不可能なトークンが存在している場合、スタック トレースを読み取れないことがあります。 この問題はこちらで追跡されており、.NET 7.0 での修正が予定されています
    • この場合の推奨される回避策は、プロジェクトをビルドして、テストを再実行することです。

お客様のフィードバックの重要性

前述のように、この試験的な機能を完成させるには、お客様のフィードバックが必要です。 より良いエクスペリエンスについての提案がある場合や、問題が発生した場合は、Microsoft への問題の報告にご協力ください。 お客様のフィードバックによってのみ重大な問題を確実に解決することができます。また、将来の決定はお客様からの情報に基づいて優先順位が設定されます。

お問い合わせについては、Visual Studio のフィードバック メカニズムをご使用ください。