次の方法で共有


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

更新 : 2007 年 11 月

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

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

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

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

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

配置エラー

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

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

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

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

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

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

アクティブな実行構成ファイルの詳細については、「方法 : テスト実行構成を適用する」を参照してください。 

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

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

ローカル テストの実行によるテスト結果と同様、リモート実行の結果はローカルで報告されます。特定のリモート テスト結果が報告されるかどうかは、生成されたテスト結果ファイルを Visual Studio Team System Test Edition がリモート テスト コンピュータからローカル コンピュータにコピーできるかどうかに依存します。

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

詳細については、「コントローラ、エージェント、およびリモート テスト マシン群のトラブルシューティング」を参照してください。

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

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

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

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

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

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

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

テスト結果を終了することによるパフォーマンスの向上

Visual Studio のパフォーマンスを向上させるには、古いテスト結果を終了します。

テストを実行すると、Visual Studio は、テストの実行とテスト結果をメモリに保存します。テストの実行とテスト結果が増すにつれて、メモリも多く消費されます。[テスト結果] ウィンドウ ツール バーの [結果の終了] をクリックして、テストの実行をメモリから解放することができます。このアクションは、テスト結果オブジェクトを解放しますが、ガベージ コレクタを明示的に呼び出すものではありません。つまり、メモリ領域は使用可能になりますが、必ずしも即座に使用可能になるわけではありません。

メモリに保持するテストの実行の最大数を設定することもできます。詳細については、「方法 : 保存されるテストの実行の数を制限する」を参照してください。

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

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

ms182478.alert_note(ja-jp,VS.90).gifメモ :

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

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

Warning VSP2013 : Instrumenting this image requires it to run as a 32-bit process.  The CLR header flags have been updated to reflect this.

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

ms182478.alert_note(ja-jp,VS.90).gifメモ :

アプリケーションを 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# で実装された別のアセンブリに移動します。

テストの種類別の詳細

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

  • 手動テスト。手動テストは、リモートで実行できません。手動テストを含むテストの実行を開始しようとすると、Test Edition はテストの実行から手動テストを削除しようとします。この場合、この事実について通知され、テスト実行をキャンセルするか、手動テストなしでテスト実行を進めるかを選択できます。詳細については、「Test Edition のダイアログ ボックス」を参照してください。

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

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

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

参照

処理手順

方法 : テスト実行の制限時間を設定する

概念

Test Edition のダイアログ ボックス

報告されたテスト結果

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

ユニット テストと C++

その他の技術情報

テストの配置

テスト実行の構成