Live Unit Testing を構成して使用する方法How to configure and use Live Unit Testing

アプリケーションの開発中、Live Unit Testing では、影響を受けた単体テストがバックグラウンドで自動的に実行されて、結果とコード カバレッジがリアルタイムに表示されます。As you're developing an application, Live Unit Testing automatically runs any impacted unit tests in the background and presents the results and code coverage in real time. コードを変更すると、Live Unit Testing は、既存のテストへの変更の影響と、新しいコードが 1 つ以上の既存のテストによってカバーされているかどうかに関するフィードバックを提供します。As you modify your code, Live Unit Testing provides feedback on how your changes impacted existing tests and whether the new code you've added is covered by one or more existing tests. それにより、バグの修正や新機能の追加を行うと、単体テストを作成する必要があることが示されます。This gently reminds you to write unit tests as you're making bug fixes or adding new features.

Note

Live Unit Testing は、Visual Studio の Enterprise エディションで、.NET Core または .NET Framework を対象とする C# および Visual Basic プロジェクトに使用することができます。Live Unit Testing is available for C# and Visual Basic projects that target .NET Core or .NET Framework in the Enterprise edition of Visual Studio.

テストで Live Unit Testing を使用すると、テストの状態に関するデータが保持されます。When you use Live Unit Testing for your tests, it persists data about the status of your tests. 保持されたデータを使用することにより、Live Unit Testing では、コード変更に対応して動的にテストを実行しながら、優れたパフォーマンスが提供されます。Using persisted data allows Live Unit Testing to offer superior performance while running your tests dynamically in response to code changes.

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

Live Unit Testing は、次の表に示されている 3 つの一般的な単体テスト フレームワークで動作します。Live Unit Testing works with the three popular unit testing frameworks listed in the following table. アダプターやフレームワークのサポートされる最小バージョンも示されています。The minimum supported version of their adapters and frameworks is also shown. 単体テスト フレームワークはすべて NuGet.org から入手できます。The unit testing frameworks are all available from NuGet.org.

テスト フレームワークTest Framework Visual Studio アダプターの最小バージョンVisual Studio Adapter minimum version フレームワークの最小バージョンFramework minimum version
xUnit.netxUnit.net xunit.runner.visualstudio バージョン 2.2.0-beta3-build1187xunit.runner.visualstudio version 2.2.0-beta3-build1187 xunit 1.9.2xunit 1.9.2
NUnitNUnit NUnit3TestAdapter バージョン 3.5.1NUnit3TestAdapter version 3.5.1 NUnit バージョン 3.5.0NUnit version 3.5.0
MSTestMSTest MSTest.TestAdapter 1.1.4-previewMSTest.TestAdapter 1.1.4-preview MSTest.TestFramework 1.0.5-previewMSTest.TestFramework 1.0.5-preview

古い MSTest に基づくテスト プロジェクトで Microsoft.VisualStudio.QualityTools.UnitTestFramework が参照されていて、新しい MSTest NuGet パッケージに移行したくない場合は、Visual Studio 2019 または Visual Studio 2017 にアップグレードしてください。If you have older MSTest-based test projects that reference Microsoft.VisualStudio.QualityTools.UnitTestFramework, and you don’t wish to move to the newer MSTest NuGet packages, upgrade to Visual Studio 2019 or Visual Studio 2017.

場合によっては、Live Unit Testing を動作させるため、プロジェクトによって参照されている NuGet パッケージの明示的な復元が必要になります。In some cases, you may need to explicitly restore the NuGet packages referenced by a project in order for Live Unit Testing to work. そのためには、ソリューションの明示的なビルドを行うか (Visual Studio の最上位メニューから [ビルド] > [ソリューションのリビルド] の順に選択)、またはソリューションのパッケージを復元します (ソリューションを右クリックして [NuGet パッケージの復元] を選択)。You can do this either by doing an explicit build of the solution (select Build > Rebuild Solution from the top-level Visual Studio menu) or by restoring packages in the solution (right-click on the solution and select Restore NuGet Packages).

構成Configure

Live Unit Testing を構成するには、Visual Studio の最上位メニュー バーから [ツール] > [オプション] の順に選択し、 [オプション] ダイアログの左側のウィンドウで [Live Unit Testing] を選択します。Configure Live Unit Testing by selecting Tools > Options from the top-level Visual Studio menu bar, and then selecting Live Unit Testing in the left pane of the Options dialog.

Tip

Live Unit Testing を有効にすると (次のセクション「開始、一時停止、停止」を参照)、 [テスト] > [Live Unit Testing] > [オプション] を選択して [オプション] ダイアログを開くこともできます。After Live Unit Testing is enabled (see the next section, Start, pause, and stop Live Unit Testing), you can also open the Options dialog by selecting Test > Live Unit Testing > Options.

次の図では、ダイアログで使用できる Live Unit Testing の構成オプションを示します。The following image shows the Live Unit Testing configuration options available in the dialog:

Live Unit Testing の構成オプション

次のオプションを構成できます。The configurable options include:

  • ソリューションをビルドしてデバッグするときに Live Unit Testing を一時停止するかどうか。Whether Live Unit Testing pauses when a solution is built and debugged.

  • システムのバッテリ電源が指定したしきい値を下回ったときに Live Unit Testing を一時停止するかどうか。Whether Live Unit Testing pauses when a system's battery power falls below a specified threshold.

  • ソリューションを開いたら Live Unit Testing を自動的に実行するかどうか。Whether Live Unit Testing runs automatically when a solution is opened.

  • デバッグ シンボルと XML ドキュメントのコメント生成を有効にするかどうか。Whether to enable debug symbol and XML documentation comment generation.

  • 保持されたデータを格納するディレクトリ。The directory in which to store persisted data.

  • 保持されたデータをすべて削除できるようにする。The ability to delete all persisted data. これは、Live Unit Testing で予測不能なまたは予期しない動作が発生している場合に便利です。この状態は、保持されたデータが破損していることを表しています。This is useful when Live Unit Testing is behaving in an unpredictable or unexpected way, which suggests that the persisted data has become corrupted.

  • テスト ケースがタイムアウトするまでの時間。既定値は 30 秒です。The interval after which a test case times out. The default is 30 seconds.

  • Live Unit Testing が作成するテスト プロセスの最大数。The maximum number of test processes that Live Unit Testing creates.

  • Live Unit Testing のプロセスが使用できるメモリの最大容量。The maximum amount of memory that Live Unit Testing processes can consume.

  • Live Unit Testing の [出力] ウィンドウに書き込まれる情報のレベル。The level of information written to the Live Unit Testing Output window.

    オプションは、ログなし ( [なし] )、エラー メッセージのみ ( [エラー] )、エラーと情報メッセージ ( [情報] 、既定値)、またはすべての詳細 ( [詳細] ) です。Options include no logging (None), error messages only (Error), error and informational messages (Info, the default), or all detail (Verbose).

    VS_UTE_DIAGNOSTICS という名前のユーザー レベル環境変数に値 "1" を設定してから Visual Studio を再起動することにより、Live Unit Testing の [出力] ウィンドウに詳細な出力を表示することもできます。You can also display verbose output in the Live Unit Testing Output window by assigning a value of "1" to a user-level environment variable named VS_UTE_DIAGNOSTICS, and then restarting Visual Studio.

    Live Unit Testing からファイルに詳細な MSBuild ログ メッセージをキャプチャするには、LiveUnitTesting_BuildLog ユーザー レベル環境変数を、ログを格納するファイルの名前に設定します。To capture detailed MSBuild log messages from Live Unit Testing in a file, set the LiveUnitTesting_BuildLog user-level environment variable to the name of the file to contain the log.

開始、一時停止、停止Start, pause, and stop

Live Unit Testing を有効にするには、Visual Studio の最上位メニューから [テスト] > [Live Unit Testing] > [開始] の順に選択します。To enable Live Unit Testing, select Test > Live Unit Testing > Start from the top-level Visual Studio menu. Live Unit Testing を有効にすると、 [Live Unit Testing] メニューで使用可能なオプションが、 [開始] の 1 項目から、 [一時停止][停止] に変わります。When Live Unit Testing is enabled, the options available on the Live Unit Testing menu change from a single item, Start, to Pause and Stop:

  • [一時停止] では、Live Unit Testing が一時的に中断されます。Pause temporarily suspends Live Unit Testing.

    Live Unit Testing を一時停止すると、カバレッジの視覚化はエディターに表示されませんが、収集されたすべてのデータは保持されます。When Live Unit Testing is paused, coverage visualization does not appear in the editor, but all the data that was collected is preserved. Live Unit Testing を再開するには、Live Unit Testing メニューから [続行] を選びます。To resume Live Unit Testing, select Continue from the Live Unit Testing menu. Live Unit Testing で、一時停止中に行われたすべての編集を取得するために必要な作業が実行されて、グリフが適切に更新されます。Live Unit Testing does the necessary work to catch up with all the edits that have been made while it was paused and updates the glyphs appropriately.

  • [停止] では、Live Unit Testing が完全に停止されます。Stop completely stops Live Unit Testing. Live Unit Testing は収集したすべてのデータを破棄します。Live Unit Testing discards all data that it has collected.

Note

単体テスト プロジェクトが含まれていないソリューションで Live Unit Testing を開始する場合、Live Unit Testing メニューには [一時停止][停止] の各オプションが表示されますが、Live Unit Testing は開始されません。If you start Live Unit Testing in a solution that does not include a unit test project, the Pause and Stop options appear on the Live Unit Testing menu, but Live Unit Testing does not start. [出力] ウィンドウには、"このソリューションではサポートされているテスト アダプターが参照されていません..." という内容で始まるメッセージが表示されます。The Output window displays a message that begins, "No supported test adapters are referenced by this solution...".

いつでも、Live Unit Testing を一時停止または完全に停止できます。At any time, you can temporarily pause or completely stop Live Unit Testing. たとえば、リファクタリングの途中で、しばらくテストが中断されることがわかっている場合に、これを行うことがあります。You may want to do this, for example, if you're in the middle of a refactoring and know that your tests will be broken for a while.

カバレッジの視覚化を表示するView coverage visualization

Live Unit Testing を有効にすると、Visual Studio エディターの各コード行が更新されて、記述しているコードが単体テストによってカバーされているかどうか、およびコードをカバーしているテストが合格かどうかが示されます。After it's enabled, Live Unit Testing updates each line of code in the Visual Studio editor to show you whether the code you're writing is covered by unit tests and whether the tests that cover it are passing. 次の図では、テストに合格したコード行と不合格のコード行、およびテストでカバーされていないコード行が示されています。The following image shows lines of code with both passing and failing tests, as well as lines of code that are not covered by tests. 緑の "✓" で示される行は、すべてのテストに合格しています。赤い "x" で示される行は、1 つ以上のテストで不合格になっています。青い "➖" で示される行は、どのテストでもカバーされていません。Lines decorated with a green "✓" are covered only by passing tests, lines decorated with a red "x" are covered by one or more failing tests, and lines decorated by a blue "➖" are not covered by any test.

Visual Studio でのコード カバレッジ

Live Unit Testing のカバレッジの視覚化は、コード エディターでコードを変更するとすぐに更新されます。Live Unit Testing coverage visualization is updated immediately when you modify code in the code editor. 次の図のように、編集を処理している間は、合格、不合格、非カバーのシンボルの下に丸いタイマーのイメージを追加することで、データが最新ではないことが示されます。While processing the edits, visualization changes to indicate that the data is not up-to-date by adding a round timer image below the passing, failing, and not covered symbols, as the following image shows.

Visual Studio のコード カバレッジとタイマー アイコン

テストの状態に関する情報を取得するGet information about test status

コード ウィンドウの合格または不合格のシンボルをカーソルでポイントすると、その行にヒットしているテストの数を確認できます。By hovering over the succeeded or failed symbol in the code window, you can see how many tests are hitting that line. 個々のテストの状態を確認するには、記号を選択します。To see the status of the individual tests, select the symbol:

Visual Studio での記号に対するテストの状態

テストの名前と結果が示されるのに加えて、ヒントを使用するとテストのセットを再実行またはデバッグできます。In addition to providing the names and result of tests, the tooltip lets you rerun or debug the set of tests. ツールヒントで 1 つ以上のテストを選択して、それらのテストのみを実行またはデバッグすることもできます。If you select one or more of the tests in the tooltip, you can also run or debug just those tests. これにより、コード ウィンドウから移動することなくテストをデバッグできます。This allows you to debug your tests without having to leave the code window. デバッグ時には、既に設定してあるブレークポイントを確認するためだけでなく、デバッガーによって実行された Assert メソッドで予期しない結果が返されたときにも、プログラムの実行が一時停止します。When debugging, in addition to observing any breakpoints you may have already set, program execution pauses when the debugger executes an Assert method that returns an unexpected result.

ツールヒントで不合格になったテストをポイントすると、展開されて、次の図に示すような不合格に関する追加情報が表示されます。When you hover over a failed test in the tooltip, it expands to provide additional info about the failure, as shown in the following image. 失敗したテストに直接移動するには、ヒントでそのテストをダブルクリックします。To navigate directly to a failed test, double-click it in the tooltip.

Visual Studio での失敗したテストのヒントの情報

失敗したテストに移動すると、次の状態のテストがメソッドのシグネチャで視覚的に示されます。When you navigate to the failed test, Live Unit Testing visually indicates in the method signature the tests that have:

  • 合格 (中身が半分入ったビーカーと緑の "✓" で示されます)passed (indicated by a half-full beaker along with a green "✓")
  • 不合格 (中身が半分入ったビーカーと赤い "🞩")failed (a half-full beaker along with a red "🞩")
  • Live Unit Testing に含まれない (中身が半分入ったビーカーと青い "➖")are not involved in Live Unit Testing (a half-full beaker along with a blue "➖")

テスト以外のメソッドにはシンボルは付きません。Non-test methods are not decorated with a symbol. 次の図では、メソッドの 4 つの種類がすべて示されています。The following image illustrates all four types of methods.

Visual Studio でのテスト メソッドと合格または不合格の記号

不合格になったテストの診断と修正Diagnose and correct test failures

不合格になったテストからは、簡単に製品のコードをデバッグし、編集して、アプリケーションの開発を続けることができます。From the failed test, you can easily debug the product code, make edits, and continue developing your application. Live Unit Testing はバックグラウンドで実行されるため、デバッグ、編集、続行のサイクルの間、Live Unit Testing を停止して再起動する必要はありません。Because Live Unit Testing runs in the background, you don't have to stop and restart Live Unit Testing during the debug, edit, and continue cycle.

たとえば、前の図に示した不合格になったテストの原因は、System.Char.IsLower メソッドに非アルファベット文字を渡すと true が返るという、テスト メソッドでの誤った想定です。For example, the test failure shown in the previous image was caused by an incorrect assumption in the test method that non-alphabetic characters return true when passed to the System.Char.IsLower method. テスト メソッドを修正した後は、すべてのテストが合格になるはずです。After you correct the test method, all the tests should pass. Live Unit Testing を一時停止または停止する必要はありません。You don't have to pause or stop Live Unit Testing.

テスト エクスプローラーTest Explorer

テスト エクスプローラーで提供されるインターフェイスを使用すると、テストを実行してデバッグし、テストの結果を分析することができます。Test Explorer provides an interface that lets you run and debug tests and analyze test results. Live Unit Testing はテスト エクスプローラーと統合します。Live Unit Testing integrates with Test Explorer. Live Unit Testing が有効になっていないか、停止されていると、テスト エクスプローラーには最後のテスト実行時の単体テストの状態が表示されます。When Live Unit Testing is not enabled or is stopped, Test Explorer displays the status of unit tests the last time a test was run. ソース コードを変更すると、テストを再実行する必要があります。Source code changes require that you rerun the tests. これに対し、Live Unit Testing が有効になっていると、テスト エクスプローラーの単体テストの状態はすぐに更新されます。In contrast, when Live Unit Testing is enabled, the status of unit tests in Test Explorer is updated immediately. 単体テストを明示的に実行する必要はありません。You don't need to explicitly run the unit tests.

Tip

テスト エクスプローラーを開くには、Visual Studio の上部にあるメニューで、 [テスト] > [Windows] > [テスト エクスプローラー] の順に選択します。Open Test Explorer by selecting Test > Windows > Test Explorer from the top-level Visual Studio menu.

テスト エクスプローラー ウィンドウで、一部のテストがフェード アウトしているのに気付くことがあります。たとえば、以前保存したプロジェクトを開いた後に Live Unit Testing を有効にすると、次の図のように、 [テスト エクスプローラー] ウィンドウで、不合格となったテストを除くすべてがフェード アウトします。You may notice in the Test Explorer window that some tests are faded out. For example, when you enable Live Unit Testing after opening a previously saved project, the Test Explorer window had faded out all but the failed test, as the following image shows. この場合、Live Unit Testing では、不合格のたテストは再実行されていますが、合格したテストは再実行されていません。In this case, Live Unit Testing has rerun the failed test, but it has not rerun the successful tests. これは、Live Unit Testing の保持されているデータでは、テストが最後に正常に実行されてから変更がなかったことが示されているためです。This is because Live Unit Testing's persisted data indicates that there were no changes since the tests were last run successfully.

テスト エクスプローラーでの不合格になったテスト

フェード表示されているテストは、テスト エクスプローラーのメニューから [すべて実行] または [実行] オプションを選択することによって、再実行できます。You can rerun any tests that appear faded by selecting the Run All or Run options from the Test Explorer menu. または、テスト エクスプローラーのメニューで 1 つ以上のテストを選択し、右クリックして、ポップアップ メニューから [選択したテストの実行] または [選択したテストのデバッグ] を選択します。Or, select one or more tests in the Test Explorer menu, right-click, and then select Run Selected Tests or Debug Selected Tests from the popup menu. 実行中のテストは最上部に表示されます。As tests are run, they bubble up the top.

Live Unit Testing で自動的にテストを実行してテスト結果を更新するのと、テスト エクスプローラーからテストを明示的に実行するのには、いくつかの違いがあります。There are some differences between Live Unit Testing automatically running and updating test results and explicitly running tests from Test Explorer. こうした違いには、次のようなものがあります。These differences include:

  • [テスト エクスプローラー] ウィンドウからテストを実行またはデバッグすると標準バイナリが実行されますが、Live Unit Testing ではインストルメント化されたバイナリが実行されます。Running or debugging tests from the Test Explorer window runs regular binaries, whereas Live Unit Testing runs instrumented binaries.
  • Live Unit Testing ではテストを実行するために新しいアプリケーション ドメインは作成されず、既定のドメインからテストが実行されます。Live Unit Testing does not create a new application domain to run tests, but rather runs tests from the default domain. [テスト エクスプローラー] ウィンドウからテストを実行すると、新しいアプリケーション ドメインが作成されます。Tests run from the Test Explorer window do create a new application domain.
  • Live Unit Testing では、各テスト アセンブリで順番にテストが実行されます。Live Unit Testing runs tests in each test assembly sequentially. [テスト エクスプローラー] ウィンドウでは、複数のテストを並列に実行できます。In the Test Explorer window, you can choose to run multiple tests in parallel.

大規模なソリューションLarge solutions

ソリューションに 10 個以上のプロジェクトがある場合、Visual Studio で以下の操作を行うと、次のダイアログが表示されます。If your solution has 10 or more projects, Visual Studio displays the following dialog when you:

  • 保持されたデータがない状態で、Live Unit Testing を開始しますstart Live Unit Testing and there is no persisted data
  • [ツール] > [オプション] > [Live Unit Testing] > [Delete Persisted Data](持続データの削除) を選択しますselect Tools > Options > Live Unit Testing > Delete Persisted Data

多数のプロジェクト用の Live Unit Testing ダイアログ

そのダイアログでは、大規模なプロジェクトで大量のテストを動的に実行すると、パフォーマンスが著しく低下する可能性があることが警告されます。The dialog warns you that dynamic execution of large numbers of tests in large projects can severely impact performance. [OK] を選択すると、Live Unit Testing はそのソリューション内のすべてのテストを実行します。If you select OK, Live Unit Testing executes all tests in the solution. [キャンセル] を選択すると、実行するテストを選択できます。If you select Cancel, you can select the tests to execute. 次のセクションでは、これを行う方法について説明します。The following section explains how to do this.

テスト プロジェクトとテスト メソッドを含めるか除外するInclude and exclude test projects and test methods

多くのテスト プロジェクトが含まれるソリューションでは、Live Unit Testing に参加するプロジェクトおよびプロジェクト内の個別メソッドを制御できます。For solutions with many test projects, you can control which projects and individual methods in a project participate in Live Unit Testing. たとえば、数百のテスト プロジェクトを含むソリューションがある場合、Live Unit Testing に参加する対象のテスト プロジェクト セットを選ぶことができます。For example, if you have a solution with hundreds of test projects, you can select a targeted set of test projects to participate in Live Unit Testing. これを行う方法は多数あり、プロジェクトまたはソリューション内のすべてのテストを除外するか、大半のテストを含めるか除外するか、テストを個別に除外するかによって決まります。There are a number of ways to do this, depending on whether you want to exclude all the tests in the project or solution, include or exclude most tests, or exclude individual tests. Live Unit Testing は、包含/除外の状態をユーザー設定として保存し、ソリューションを閉じて再び開くときに記憶しています。Live Unit Testing saves include/exclude state as a user setting and remembers it when a solution is closed and reopened.

プロジェクトまたはソリューション内のすべてのテストを除外するExclude all tests in a project or solution

単体テストで個別のプロジェクトを選ぶには、Live Unit Testing を開始した後で次のようにします。To select the individual projects in unit tests, do the following after Live Unit Testing is started:

  1. ソリューション全体を除外するには、ソリューション エクスプローラーでソリューションを右クリックし、 [Live Tests](ライブ テスト) > [除外する] を選びます。Right-click the solution in Solution Explorer and choose Live Tests > Exclude to exclude the entire solution.
  2. 個別のテスト プロジェクトをテストに含めるには、各テスト プロジェクトを右クリックし、 [Live Tests](ライブ テスト) > [含める] を選びます。Right-click each test project that you'd like to include in the tests and choose Live Tests > Include.

コード エディター ウィンドウからテストを個別に除外するExclude individual tests from the code editor window

テスト メソッドを個別に追加または除外する場合には、コード エディター ウィンドウを使います。You can use the code editor window to include or exclude individual test methods. コード エディター ウィンドウでテスト メソッドのシグネチャを右クリックして、次のいずれかのオプションを選択します。Right-click on the signature of the test method in the code editor window, and then select one of the following options:

  • [Live Tests](ライブ テスト) > [Include <selected method>](<選択したメソッド> を含める)Live Tests > Include <selected method>
  • [Live Tests](ライブ テスト) > [Exclude <selected method>](<選択したメソッド> を除外する)Live Tests > Exclude <selected method>
  • [Live Tests](ライブ テスト) > [Exclude All But <selected method>](<選択したメソッド> 以外をすべて除外する)Live Tests > Exclude All But <selected method>

プログラムによってテストを除外するExclude tests programmatically

Live Unit Testing でのカバレッジのレポートからメソッド、クラス、または構造体をプログラムによって除外する場合には、ExcludeFromCodeCoverageAttribute 属性を適用できます。You can apply the ExcludeFromCodeCoverageAttribute attribute to programmatically exclude methods, classes, or structures from reporting their coverage in Live Unit Testing.

Live Unit Testing から個別のメソッドを除外するには、次の属性を使用します。Use the following attributes to exclude individual methods from Live Unit Testing:

  • xUnit の場合: [Trait("Category", "SkipWhenLiveUnitTesting")]For xUnit: [Trait("Category", "SkipWhenLiveUnitTesting")]
  • NUnit の場合: [Category("SkipWhenLiveUnitTesting")]For NUnit: [Category("SkipWhenLiveUnitTesting")]
  • MSTest の場合: [TestCategory("SkipWhenLiveUnitTesting")]For MSTest: [TestCategory("SkipWhenLiveUnitTesting")]

Live Unit Testing からテストのアセンブリ全体を除外するには、次の属性を使用します。Use the following attributes to exclude an entire assembly of tests from Live Unit Testing:

  • xUnit の場合: [assembly: AssemblyTrait("Category", "SkipWhenLiveUnitTesting")]For xUnit: [assembly: AssemblyTrait("Category", "SkipWhenLiveUnitTesting")]
  • NUnit の場合: [assembly: Category("SkipWhenLiveUnitTesting")]For NUnit: [assembly: Category("SkipWhenLiveUnitTesting")]
  • MSTest の場合: [assembly: TestCategory("SkipWhenLiveUnitTesting")]For MSTest: [assembly: TestCategory("SkipWhenLiveUnitTesting")]

関連項目See also