Visual Studio 2017 での Live Unit Testing

Live Unit Testing は、アプリケーションの開発中に、影響を受けた単体テストをバックグラウンドで自動的に実行して、結果とコード カバレッジを Visual Studio IDE にリアルタイムで表示します。 コードを変更すると、Live Unit Testing は、既存のテストへの変更の影響と、新しいコードが 1 つ以上の既存のテストによってカバーされているかどうかに関するフィードバックを提供します。 それにより、バグ修正や新機能の追加を行ったら単体テストを作成する必要があることを思い出させます。

注意

Live Unit Testing は、Visual Studio 2017 の Enterprise Edition で .NET Framework を対象とする C# および Visual Basic プロジェクトに使うことができます。 現在、.NET Core では利用できません。

サポートされるテスト フレームワーク

Live Unit Testing は、次の表に示されている 3 つの一般的な単体テスト フレームワークで動作します。 アダプターやフレームワークのサポートされる最小バージョンも表に示されています。 単体テスト フレームワークはすべて NuGet.org から入手できます。


テスト フレームワーク Visual Studio アダプターの最小バージョン フレームワークの最小バージョン
xUnit.net xunit.runner.visualstudio バージョン 2.2.0-beta3-build1187 xunit 2.0
NUnit NUnit3TestAdapter バージョン 3.5.1 NUnit バージョン 3.5.0
MSTest MSTest.TestAdapter 1.1.4-preview MSTest.TestFramework 1.0.5-preview

既存のプロジェクトから以前のアダプターとテスト フレームワークを参照している場合は、必ずそれらを削除してください (MSTest を使っている場合は、Microsoft.VisualStudio.QualityTools.UnitTestFramework の参照を削除したことを確認してください)。Live Unit Testing が動作しない場合は、新しく追加します。

場合によっては、Live Unit Testing を動作させるため、ソリューションのプロジェクトによって参照されている NuGet パッケージの明示的な復元が必要になります。 そのためには、Living Unit Testing を有効にする前に、ソリューションの明示的なビルドを行うか (Visual Studio の最上位メニューから [ビルド][ソリューションのリビルド] を選択)、またはソリューションのパッケージを復元します (ソリューションを右クリックして [NuGet パッケージの復元] を選択)。

Live Unit Testing の構成

Live Unit Testing を構成するには、Visual Studio の最上位メニューから [ツール][オプション] を選び、[オプション] ダイアログの左側のウィンドウで [Live Unit Testing] を選びます。 次の図は、ダイアログで設定できる Live Unit Testing の構成オプションです。

イメージ

次のオプションを構成できます。

  • ソリューションを開いたら Live Unit Testing を自動的に実行するかどうか。
  • ソリューションをビルドしてデバッグするとき、またはシステムのバッテリ電源が指定したしきい値を下回ったときに、Live Unit Testing を一時停止するかどうか。
  • テスト ケースがタイムアウトするまでの時間 (既定値は 30 秒)。
  • Live Unit Testing が作成するテスト プロセスの数。
  • Live Unit Testing の [出力] ウィンドウに書き込まれる情報のレベル。 オプションは、ログなし ([なし])、エラー メッセージのみ ([エラー])、エラーと情報メッセージ ([情報]、既定値)、またはすべての詳細 ([詳細]) です。

VS_UTE_DIAGNOSTICS という名前のユーザー レベル環境変数に値 "1" を設定して Visual Studio を再起動することにより、Live Unit Testing の [出力] ウィンドウに詳細な出力を表示することもできます。

Live Unit Testing からファイルに詳細な MSBuild ログ メッセージをキャプチャするには、LiveUnitTesting_BuildLog ユーザー レベル環境変数に、ログを格納するファイルの名前を設定します。

Live Unit Testing の開始、一時停止、停止

Live Unit Testing を有効にするには、Visual Studio の最上位メニューから [テスト][Live Unit Testing][開始] の順に選びます。 Live Unit Testing を有効にすると、[Live Unit Testing] メニューのオプションが、[開始] の 1 項目から、[一時停止][停止][再起動] に変わります。

いつでも、Live Unit Testing を一時停止または完全に停止できます。 たとえば、リファクタリングの途中で、しばらくテストが中断されることがわかっている場合に、これを行うことがあります。 3 つのメニュー オプションは次のとおりです。

  • [一時停止] は、Live Unit Testing を一時的に中断します。 Live Unit Testing を一時停止すると、カバレッジの視覚化はエディターに表示されませんが、収集されたすべてのデータは保持されます。 Live Unit Testing を再開するには、Live Unit Testing のメニューから [続行] を選びます。 Live Unit Testing は、一時停止中に行われたすべての編集を取得するために必要な作業を実行し、グリフを適切に更新します。
  • [停止] は、Live Unit Testing を完全に停止します。 Live Unit Testing は収集したすべてのデータを破棄します。
  • [再起動] は、[Live Unit Testing] メニューで [停止] を選んでから [開始] を選ぶのと同じです。

入力しながらエディターにカバレッジの視覚化を表示する

Live Unit Testing を有効にすると、Visual Studio エディターの各コード行が更新されて、記述しているコードが単体テストによってカバーされているかどうか、およびコードをカバーしているテストが合格かどうかが示されます。 次の図では、テストに合格したコード行と不合格のコード行、およびテストでカバーされていないコード行が示されています。 緑の "✓" で示される行は、合格したテストによってのみカバーされています。赤い "🞩" で示される行は、1 つ以上のテストで不合格になっています。青い "" によって示される行は、どのテストでもカバーされていません。

イメージ

Live Unit Testing のカバレッジの視覚化は、コード エディターでコードを変更するとすぐに更新されます。 次の図のように、編集を処理している間は、合格、不合格、非カバーのシンボルの下に丸いタイマーのイメージを追加することで、データが最新ではないことが示されます。

イメージ

テストの合格または不合格に関する情報の取得

コード ウィンドウの合格または不合格のシンボルをカーソルでポイントすると、その行にヒットしているテストの数を確認できます。 シンボルをクリックすると、個々のテストの状態を確認できます (次の図を参照)。

イメージ

ツール ヒントで不合格になったテストをポイントすると、次の図に示すように、不合格に関する追加情報が表示されます。 ツール ヒントで不合格なテストをクリックすると、追加情報に直接移動できます。

イメージ

不合格になったテストの診断と修正

不合格になったテストからは、簡単に製品コードをデバッグし、編集して、アプリケーションの開発を続けることができます。 Live Unit Testing はバックグラウンドで実行するので、デバッグ、編集、続行のサイクルの間も、Live Unit Testing を停止して再起動する必要はありません。

たとえば、前の図に示されている不合格なテストは、Char.IsLower メソッドに非アルファベット文字を渡すと true が返るという、テスト メソッドでの誤った想定によるものです。 テスト メソッドを修正すると、すべてのテストに合格します。 これを行っている間、Live Unit Testing を一時停止または停止する必要はありません。

Live Unit Testing とテスト エクスプローラー

通常、テスト エクスプローラーでは、実行、デバッグ、およびテスト結果の分析を行うことができるインターフェイスが提供されます。 Live Unit Testing はテスト エクスプローラーと統合します。 Live Unit Testing が有効になっていないか、停止されていると、テスト エクスプローラーには最後のテスト実行時の単体テストの状態が表示されます。 ソース コードを変更すると、テストを再実行する必要があります。 これに対し、Live Unit Testing が有効になっていると、テスト エクスプローラーの単体テストの状態はすぐに更新されます。 単体テストを明示的に実行する必要はありません。

ただし、Live Unit Testing による自動的な実行およびテスト結果の更新と、テスト エクスプローラーからの明示的なテスト実行の間には、いくつかの違いがあります。 次の設定があります。

  • [テスト エクスプローラー] ウィンドウからテストを実行またはデバッグすると標準バイナリが実行されますが、Live Unit Testing ではインストルメント化されたバイナリが実行されます。
  • Live Unit Testing ではテストを実行するために新しいアプリケーション ドメインは作成されず、既定のドメインからテストが実行されます。 [テスト エクスプローラー] ウィンドウからテストを実行すると、新しいアプリケーション ドメインが作成されます。
  • Live Unit Testing では、各テスト アセンブリで順番にテストが実行されます。 [テスト エクスプローラー] ウィンドウから複数のテストを実行した場合、[テストを並列で実行する] ボタンが選ばれていると、テストは並列に実行されます。

テスト プロジェクトとテスト メソッドを含めるか除外する

多くのテスト プロジェクトを含むソリューションでは、Live Unit Testing に参加するプロジェクトおよびプロジェクト内の個別メソッドを制御できます。

たとえば、数百のテスト プロジェクトを含むソリューションがある場合、Live Unit Testing に参加する対象のテスト プロジェクト セットを選ぶことができます。 単体テストで個別のプロジェクトを選ぶには、Live Unit Testing を開始した後で次のようにします。

  1. ソリューション全体を除外するには、ソリューション エクスプローラーでソリューションを右クリックし、[Live Tests (ライブ テスト)][除外する] を選びます。
  2. 個別のテスト プロジェクトをテストに含めるには、各テスト プロジェクトを右クリックし、[Live Tests (ライブ テスト)][含める] を選びます。

個々のテスト メソッドを追加または除外するには、コード エディター ウィンドウを使います。 コード エディター ウィンドウでテスト メソッドのシグネチャを右クリックし、[Live Tests (ライブ テスト)][含める] または [Live Tests (ライブ テスト)][除外する] を選びます。

または、 属性をプログラムで適用して、Live Unit Testing でのカバレッジのレポートからメソッド、クラス、または構造体を除外することもできます。

Live Unit Testing は、包含/除外の状態をユーザー設定として保存し、ソリューションを閉じて再び開くときに記憶しています。

関連項目

Live Unit Testing のブログ
Live Unit Testing に関する FAQ
Channel 9 ビデオ: Visual Studio 2017 での Live Unit Testing