Test Edition でのトラブルシューティング
更新 : 2007 年 11 月
コードをテストしていると、何らかの理由でエラーや警告が発生したり、場合によってはテストが失敗することもあります。このトピックでは、その理由と解決策について、いくつか説明します。
テスト実行のトラブルシューティング
テストの実行を妨げる原因として最もよく見られるのは、テスト ファイルなどのテストの実行に必要なファイルの配置ミスです。
リモート テスト。リモート テストの場合は、リモート コンピュータとの通信の問題が原因の場合もあります。この問題を含むテスト レベルや実行レベルのエラーの詳細については、「テスト実行のトラブルシューティング」を参照してください。
ASP.NET 単体テスト。ASP.NET 単体テストを IIS プロセスで実行している場合、セキュリティ向上を目的として、ASP.NET プロセスを非既定ユーザーとして、つまり別のプロセス ID で実行できます。この場合、テストの実行が失敗することがあります。詳細については、「ASP.NET 単体テストの概要」を参照してください。
ファイルをテストと共に配置する。配置エラーは、多くの場合、失敗した各テストの [テスト結果の詳細] ページにではなく [テストの実行の詳細] ページに表示されます。このため、各テストの失敗原因が明確にならないことがあります。詳細については、テスト配置の概要の「テスト配置のトラブルシューティング」を参照してください。
Web テストのトラブルシューティング。Web テストを実行すると、さまざまなエラーが発生する可能性があります。原因としては、データ バインディング属性の欠落、セキュリティ設定の問題、ファイアウォールの外側にある Web サイトへのアクセスなどが考えられます。詳細については、「Web テストのトラブルシューティング」を参照してください。
ロード テストのトラブルシューティング。ロード テストを実行すると、さまざまなエラーが発生する可能性があります。原因としては、ロード テスト データベースの問題、ロード テストに設定されたカウンタ、リモート テスト マシン群の不適切な構成、ロード テストに含まれているいずれかのテストの問題などが考えられます。詳細については、「ロード テストのトラブルシューティング」を参照してください。
データ ドリブン単体テストのトラブルシューティング。データ ドリブン単体テストを実行すると、接続、認証、配置などの問題が発生することがあります。問題を解決するには、「データ ドリブン単体テストのトラブルシューティング」を参照してください。
厳密な名前のアセンブリの再署名
単体テストを実行する場合、コードをバイナリでテストすることになります。このようなテストでバイナリをインストルメント化しておくと、コード カバレッジ情報を収集できます。詳細については、「方法 : コード カバレッジ データを取得する」を参照してください。インストルメンテーション処理により、コード カバレッジ情報を生成するコードがバイナリに追加されます。
テストしているバイナリが厳密な名前のアセンブリである場合、インストルメンテーションによるコードの変更によって署名が無効になります。このため、Visual Studio は、インストルメンテーション処理の直後にアセンブリを自動的に再署名しようとします。厳密な名前のアセンブリの詳細については、「厳密な名前付きアセンブリ」を参照してください。
この再署名が失敗する条件がいくつかあります。こうした条件を回避する方法の詳細については、「アセンブリのインストルメント化と再署名」を参照してください。
コード カバレッジ データと VSPerfMon.exe
コード カバレッジ データを収集するテストの実行と同時に VSPerfMon.exe を実行すると、次のイベントが発生します。
TRACE または SAMPLE オプションを指定して VSPerfMon を実行すると、同時に実行されているテストが失敗し、エラーが [テストの実行の詳細] ページに報告されます。
COVERAGE オプションを指定して VSPerfMon.exe を実行すると、VSPerfMon.exe プロセスが停止します。
どちらの場合も、回避策は VSPerfMon.exe とコード カバレッジ データを収集するテストを同時に実行しないことです。VSPerfMon.exe ツールの詳細については、「VSPerfMon」を参照してください。
同時実行の発生条件
VSPerfMon が実行される一般的なケースは、次のとおりです。
プロファイリング セッションを開始するのに、テストを実行しているインスタンス以外の Visual Studio インスタンスを使用した場合。
コード カバレッジ データまたはプロファイリング データの収集を目的として、VSPerfMon.exe を直接起動したか、VSPerfCmd.exe というラッパを使用した場合 (こちらが一般的)。
コード カバレッジ データが正しく表示されない
テストのコード カバレッジ データの収集を要求しても、それが表示されない場合、または予期した表示ではなかった場合、次のいずれかの状況に該当している可能性があります。
**コード カバレッジ データが表示されない。**テストの実行中、COM DLL などの特定のバイナリが、テスト配置ディレクトリからではなく、元の場所から読み込まれています。これらのバイナリは同じ場所でインストルメント化される必要があります。テストの実行が成功し、実行レベルの警告が生成されなかったとしても、コード カバレッジ データは収集されません。詳細については、「インストルメンテーション フォルダの選択」を参照してください。
**コード カバレッジが強調表示されない。**テストを実行し、コード カバレッジ データを収集してテスト結果を表示すると、Visual Studio はソース コード ファイルで該当部分のコードを強調表示して、テストの実行でテストされたコードを示します。カバーされたコード、カバーされていないコード、および部分的にカバーされたコードを示す色を選択できます。強調表示の一部または全部が表示されない場合は、選択されている色がソース コード ファイルの背景色と異なっていることを確認してください。強調表示の色の選択の詳細については、「方法 : コード カバレッジ データを取得する」の「コード カバレッジ データの表示の変更」を参照してください。
**コード カバレッジ データが正しくマージされない。**1 つまたは複数の ASP.NET テストの実行を含む結果をマージできますが、[コード カバレッジの結果] ウィンドウでは、ASP.NET データは、単一のマージされたノードにではなく、個別のノードの [マージされた結果] に表示されます。詳細については、「マージされたコード カバレッジ データ」を参照してください。
**マージされたコード カバレッジ データの一部が表示されない。**コード カバレッジ データをマージしたら、それを XML ファイルとしてディスクにエクスポートできます。このファイルを再インポートして追加データとマージすると、一部の統計情報が表示されなくなります。詳細については、「マージされたコード カバレッジ データ」を参照してください。
**コード カバレッジ データがインポートされない。**コード カバレッジ データをインポートするには、Visual Studio が所定のファイルをディスク上で検索できる必要があります。詳細については、「マージされたコード カバレッジ データ」を参照してください。
**インストルメント化されたバイナリが上書きされる。**手動テストで実行中のプログラムから、コード カバレッジ データを取得する場合があります。目的のプログラムを起動するのに Ctrl キーを押しながら F5 キーを押すと、プログラムのバイナリが再ビルドされます。これにより、インストルメント化されたバイナリが上書きされ、コード カバレッジ データが収集されなくなります。
コード カバレッジ データの収集の詳細については、「方法 : コード カバレッジ データを取得する」を参照してください。
テスト メソッドの追加によるパフォーマンスの問題
新しいテスト メソッドを追加すると、そのテスト メソッドを [テスト ビュー] ウィンドウとテスト リスト エディタに追加する処理がバックグラウンドで実行されます。したがって、これはすぐに表示されます。1 つのテスト クラスまたはプロジェクト全体に多数のテスト メソッドがある場合、新しいテスト メソッドをこのテスト クラスに追加すると、この自動処理のためにパフォーマンスの問題が生じる可能性があります。
このパフォーマンスの問題が生じた場合、次の 3 つの解決策が考えられます。
テスト クラスを部分クラスに分割し、テスト メソッドを複数の部分クラスに分散できます。これにより、1 つのテスト クラスに含まれるメソッドの数が減り、テスト メソッドを追加したときのパフォーマンスが向上します。
新しいテスト プロジェクトを作成し、一部のテスト クラスをこの新しいテスト プロジェクトに移動した後で、移動したテスト クラスを元のテスト プロジェクトから削除します。これにより、1 つのアセンブリに含まれるテスト メソッドの数が減り、パフォーマンスが向上します。
テスト メソッドを [テスト ビュー] ウィンドウとテスト リスト エディタに追加する処理のバックグラウンド実行を無効にするオプションがあります。これにより、テスト メソッドを追加する処理のパフォーマンスが向上します。ただし、このオプションを設定すると、テスト メソッドを含むクラスをコンパイルしてから [テスト ビュー] ウィンドウまたはテスト リスト エディタの [最新の情報に更新] をクリックするまで、テスト メソッドは [テスト ビュー] ウィンドウまたはテスト リスト エディタに表示されません。
メモ : このオプションを設定すると、新しいテスト メソッドはコンパイル時に検出されます。これにより、ソリューションのコンパイル時間が長くなります。
テスト メソッドの自動検出を無効にするには
[ツール] メニューの [オプション] をクリックします。
[オプション] ダイアログ ボックスが表示されます。
左ペインの [テスト ツール] を展開し、[テスト プロジェクト] をクリックします。
テスト メソッドの自動検出を無効にするには、[テスト メソッドのバックグラウンド探索を無効にする] チェック ボックスをオンにします。
メモ : このオプションを設定すると、テスト クラスに追加したテスト メソッドは、テスト メソッドを含むクラスをコンパイルするまで [テスト ビュー] ウィンドウまたはテスト リスト エディタに表示されません。