テスト実行のトラブルシューティング

テストの実行に失敗した場合は、テスト環境をチェックすることでエラーを調査できます。テスト環境には、テストのセットアップ方法や、アクティブなテストの設定が含まれます。配置に関連する場合など、テストの種類とは関係のないエラーもあります。それ以外の場合は、テストの種類によって調査の方法と対象が決定されます。テストの種類に応じた調査のヒントについては、「テストの種類別の詳細」を参照してください。

テストに関するエラーは、次の 2 つのいずれかのレベルで報告されます。

  • テスト レベル エラー。テスト結果ウィンドウを使用して、テスト結果をダブルクリックするか、テスト結果を右クリックして [テスト結果の詳細の表示] をクリックします。これにより、テストの詳細ページが表示されます。このページには、単体テストの場合のスタック トレース情報など、テストの種類に応じてエラー メッセージやその他の詳細が表示されます。テスト レベル エラーの例としては、テストのタイムアウト制限に達したときに発生するテスト タイムアウト エラーがあります。

  • 実行レベル エラー。テストの設定エラーを含む実行レベルのエラーは、テスト結果ウィンドウで報告されます。実行レベル エラーが発生すると、[テスト結果] ウィンドウのステータス バーにリンクが表示されます。このリンクをクリックすると、テストの実行の詳細ページのエラーに関する詳細を表示します。[テスト結果] ウィンドウのツール バーの [実行の詳細] を選択することで、テストの実行の詳細] ページを表示できます。実行レベル エラーの例としては、実行のタイムアウト制限に達したときに発生する実行タイムアウト エラーがあります。

問題が発生してもテストの実行が失敗しないこともあります。コード カバレッジ データを取得することを選択した場合、プロジェクトのビルド設定によってはテストを実行すると警告が生成されることがあります。詳細については、「コード カバレッジ データを取得する場合の AnyCPU ビルド設定の使用」を参照してください。

配置エラー

自動で実行できるテスト、つまりテストの種類が手動以外の場合に発生する可能性がある特定のエラーがあります。これらのエラーの多くは、テストの配置に関連しています。テストが配置されると、そのテストを含むファイルは、ローカル コンピューターまたはリモート コンピューターのいずれかの場所にある別のフォルダーにコピーされます。

単体テストの場合、たとえばテスト プロジェクトからビルドされた .dll ファイルは、配置する必要のあるファイルです。このバイナリ ファイルを配置できない場合、このファイルに含まれるすべての単体テストは、実行されるとすぐに、[テスト結果] ウィンドウで "失敗しました" とマークされます。

このエラーを修正するには、ファイルがローカル コンピューターで利用できること、およびテスト バイナリを前回再ビルドしたときにビルド エラーがなかったことを確認してください。

バイナリ ファイル以外も配置できます。データ ファイルなど、特定のファイルがテストに必要であり、テストと一緒に配置する必要があることを指定することがあります。配置時に、このファイルが移動または削除されたために見つからない場合、テストは正しく実行できず、エラーが発生します。汎用テストに関連するこのエラーについては、「テストの種類別の詳細」も参照してください。

このエラーを調査するには、最初に、テストの設定を編集するために使用されるダイアログ ボックスの [配置] ページに指定されているファイルおよびフォルダーを確認します。詳細については、「Visual Studio のテストにおけるテスト設定の指定」を参照してください。次に、ディスクにそれらのファイルおよびフォルダーが存在し、名前が一致していることを確認します。

ソリューションには、複数のテストの設定ファイルが含まれることがあります。その場合は、テスト エラーが発生したときにアクティブであったテストの設定をチェックしてください。アクティブであったテストの設定を判断するには、そのテストの実行の [テストの実行の詳細] ページを調べます。

アクティブなテストの設定ファイルの詳細については、「方法: Microsoft Visual Studio からアクティブなテストの設定を選択する」を参照してください。

リモート テスト結果を報告する際のエラー

テストをリモートで実行すると、テスト結果が表示されない場合があります。このエラーは、リモートでのテスト実行の特性に関連していると考えられます。

ローカル テストの実行によるテスト結果と同様、リモート実行の結果はローカルで報告されます。特定のリモート テスト結果に関するレポートは、Visual Studio Ultimate の容量によって決まりますまたはコピーする Visual Studio Premium、リモート テスト コンピューターからローカル コンピューターにテスト結果ファイルを生成しました。

リモート テスト結果に関連して発生するエラーが見つかった場合は、まず、リモート コンピューターと Visual Studio を実行しているコンピューターの間のネットワーク接続が切断されていないかどうかを確認してください。

詳細については、「テスト コンピューターでのテストの実行またはデータの収集の設定」を参照してください。

インストルメンテーション エラー

コード カバレッジの報告を有効にするには、テストされるバイナリ ファイルがインストルメントされ配置されてから、それらのファイルに対してテストを実行する必要があります。

バイナリ ファイルのインストルメント エラーは、コード カバレッジの報告が失敗する原因となります。テスト実行が完了すると、[テストの実行の詳細] ページに、コード カバレッジを報告できなかったことを示すエラー メッセージとその原因が表示されます。

バイナリ ファイルのインストルメント エラーで考えられる原因は、そのファイルが読み取り専用とマークされているか、別のプロセスによってそのファイルが使用中であることです。読み取り専用のバイナリ ファイルによるエラーを解決するには、まず、そのバイナリ ファイルの属性をチェックして、書き込みできるようにします。チェックするバイナリ ファイルを確認するには、アクティブなテストの設定の [コード カバレッジ] ページを開きます。このページで、インストルメンテーションのファイルが指定されています。詳細については、「方法: コード カバレッジ データを取得する」を参照してください。

埋め込みインストルメンテーションを使用している場合、1 つまたは複数の単体テストを手動テストと共に使用していると、別な原因でコード カバレッジ エラーが発生することがあります。手動テストの際に、テスターはテスト対象の実行コードを実行します。テスターが F5 キーまたは Ctrl + F5 キーを押すか、コードをデバッグすると、プロジェクトの実行可能ファイルが再ビルドされ、インストルメンテーションが削除されます。

また、バイナリ ファイルを使用しているプロセスが他にないことを確認してください。たとえば、Visual Studio の別のインスタンスでファイルを開いていないことを確認します。

厳密な名前付きアセンブリ のインストルメント化では、アセンブリの再署名に関連する他のエラーが発生することがあります。詳細については、「アセンブリのインストルメント化と再署名」を参照してください。

コード カバレッジ データを取得する場合の AnyCPU ビルド設定の使用

コード カバレッジ データを取得できるのは、コードを 32 ビット アセンブリでテストする場合のみです。この条件を満たすには、特定のビルド プロパティを設定する必要があります。

[!メモ]

C++ プロジェクトでは AnyCPU は選択できないプラットフォームなので、この警告は C++ プロジェクトには適用されません。

値が AnyCPU に設定された状態でプロジェクトをビルドすると、生成されるアセンブリ上で実行されるテストによりコード カバレッジ データが生成されますが、テストを実行することで警告も生成されます。次のような警告テキストが [テストの実行の詳細] ページに表示されます。

警告 VSP2013: このイメージをインストルメント化するには、32 ビット プロセスとして実行する必要があります。CLR ヘッダー フラグは、この操作を反映するために更新されました。

この警告は、テストの実行中にコード カバレッジ データを取得することを目的として、アセンブリが x86 プロパティが適用された状態で再コンパイルされたことを示しています。この警告が表示されないようにするには、コード カバレッジ データを取得するアセンブリをすべて x86 設定でコンパイルします。

[!メモ]

アプリケーションを 32 ビット コンピューターでも 64 ビット コンピューターでも実行できるようにする場合は、テストが完了した後に必ず AnyCPU 設定で再コンパイルしてください。

単体テストの実行による C++/CLI テスト アセンブリのロック

テスト実行エンジンがテスト プロジェクト内のアセンブリを開き、ロックすることがあります。この場合、アセンブリに加えた変更を保存できないなどの問題が発生します。この問題は、次のような状況で発生する可能性があります。

  • ケース 1: テスト プロジェクト TestProjectA の配置を無効にした場合。TestProjectA は C++/CLI でコンパイルされています。TestProjectA のコードは属性クラスを定義し、その属性が TestProjectA に含まれる 1 つ以上のテスト メソッドを修飾します。この時点で TestProjectA 内の単体テストを実行すると、テスト実行エンジンが TestProjectA.DLL を開き、この DLL がロックされた状態になることがあります。

  • ケース 2: テスト プロジェクト TestProject1 に別のテスト プロジェクト TestProject2 からコンパイルされた DLL が含まれている場合。TestProject2 は C++/CLI でコンパイルされています。TestProject2 のコードは属性クラスを定義し、その属性が TestProject2 に含まれる 1 つ以上のテスト メソッドを修飾します。このとき、TestProject1 内の単体テストを実行すると、テスト実行エンジンが TestProject2.DLL を開き、この DLL がロックされた状態になることがあります。

いずれのケースでも解決策は 2 つの作業から成ります。まず、次の手順を実行します。

  1. [ツール] メニューの [オプション] をクリックします。

    [オプション] ダイアログ ボックスが表示されます。

  2. [ツールのテスト] を展開し、**[テストの実行]**を選択します。

  3. [パフォーマンス][テストの実行の間、テスト実行エンジンの実行状態を保持する] チェック ボックスをオフにします。

上記の手順を実行しても問題が解決しない場合は、次の操作を実行します。

C++/CLI でコンパイルされたテスト プロジェクトを既定の AppDomain に読み込むことが不要になるようにコードを変更します。その 1 つの方法として、使用するカスタム属性の定義を C# で実装された別のアセンブリに移動します。

テストの種類別の詳細

このセクションで説明されているように、一部のエラーは、特定の種類のテストを実行しているときに、頻繁にまたは主に発生します。

  • 順序指定テスト。順序指定テストで発生するエラーの多くは、ファイルの配置に関連しています。テスト エンジンは、順序指定テストを実行するために、含まれるすべてのテストのすべてのテスト ファイルとその他の必須ファイルを見つけて、配置する必要があります。いずれかのテストについてこの処理が行われない場合は、エラーが発生します。

  • 汎用テスト。配置エラーは、汎用テストを実行する場合にも発生する可能性があります。汎用テストの場合、配置するファイルを 2 つの方法で指定できます。テストの設定の [配置] ページで指定する方法と、汎用テスト自体の作成ページで指定する方法です。すべての必須ファイルを指定しなかった場合、またはそれらのファイルを指定された場所で見つけることができなかった場合、テストは失敗する可能性があります。

    ファイルを配置するこの 2 つの方法の違いに応じて、エラーは異なるレベルで表示されます。配置エラーが汎用テストの作成ページで指定されたファイルに関連する場合、エラーはテスト レベルで現れます。配置エラーがテストの設定で指定されたファイルに関連する場合、エラーは実行レベルで現れます。

参照

処理手順

方法: 指定した時間の経過後にテストの実行を強制終了する

概念

アセンブリのインストルメント化と再署名

Microsoft テスト マネージャーでのテスト結果の確認