方法 : テスト実行の制限時間を設定する
テストまたはテスト実行で従う制限時間を設定できます。 たとえば、テスト ラボで作業していて、その日の特定の時間までにテスト実行を完了させる必要がある場合に、これを設定する必要があります。
制限時間を使用する別のシナリオは、非応答コードの場合です。 テストで応答しないコードのセクションが出現した場合に、テストのタイムアウトおよびテスト実行のタイムアウトを使用することで、個別のテストを終了させ、後続のテストでテストの実行を続行できます。
制限時間を設定するには、次の 2 つの方法があります。
テストおよびテストの実行のタイムアウト値は、テストの設定で設定します。 テストの設定の詳細については、「Visual Studio から自動テストを実行するためのテストの設定の作成」を参照してください。
個別のテストにプロパティを設定することで、テスト単位のタイムアウト値をオーバーライドできます。 テスト実行のタイムアウト値はオーバーライドできません。
特定のテストの種類では、テストのタイムアウトを設定できません。 テストのタイムアウトは手動テストに適用されませんが、テスト実行のタイムアウトは、テスト実行に手動テストが含まれる場合でも常に有効です。
テストおよびテストの実行の時間制限を設定すると、次の効果があります。
テスト実行の時間がそのタイムアウト値に達すると、一部のテストが実行されていない場合でも、テストの実行は中止されます。
個別のテスト時間がそのタイムアウト値に達すると、そのテストの実行は停止し、テストはタイムアウトとマークされます。 テストの実行は、後続のテストを続行します。
初期化メソッドがテストのタイムアウトに与える影響
テストの実行には、AssemblyInitializeAttribute メソッドと ClassInitializeAttribute メソッドが含まれていることがあります。 これらのメソッドを定義すると、その完了に一定の時間を要し、その後でテストの実行の最初のテストが開始されます。
これらの初期化メソッドの実行時間が最初のテストの実行時間に加算されます。 これは次のような式で表すことができます。
Dt = 合計継続時間
Dr = テストの実行時間
I = アセンブリおよびクラスの初期化メソッド
Tn = テストの実行内のランダムな位置で実行されるテスト
T1 = テストの実行内の最初の位置で実行されるテスト
以下は最初のテストより後のすべてのテストに適用されます。
Dt**[Tn] = Dr[Tn]**
次のケースに注意してください。
Dt**[T1] = Dr[T1] + D[I]**
最初に実行されるテストには、テスト単位のタイムアウト値が割り当てられていることがあります。 その場合、初期化の時間が最初のテストの制限時間に算入されるため、テストが失敗する可能性があります。
注意
この制限によって実行が失敗となる可能性があるのは最初のテストだけです。 テストの実行の後続のテストは影響を受けません。
テストの実行に初期化メソッドが含まれている場合、この制限を回避するには、各テストにテスト メソッドと初期化メソッドの予想実行時間の合計より大きいタイムアウト値を適用します。 この設定は各テストについて個別に行う必要があります。 単体テストではテストの実行順序が保証されないため、最初に実行されるテストを予測することはできません。
クリーンアップ メソッドがテストの実行タイムアウトに与える影響
テストの実行には、AssemblyCleanupAttribute メソッドと ClassCleanupAttribute メソッドが含まれていることがあります。 これらのメソッドが完了してからテストの実行が終了します。
テストの実行にはタイムアウト値が割り当てられていることがあります。 クリーンアップ メソッドの実行時間がテストの実行に必要な時間の合計に加算されます。 つまり、クリーンアップの時間がテストの実行全体に適用される制限時間に算入されるため、テストの実行がタイムアウトとなる可能性があります。
テスト実行のタイムアウトを設定するには
ソリューション エクスプローラーを開きます。
ソリューションの [ソリューション項目] フォルダーで、テストの設定ファイルをダブルクリックします。
[構成の設定] ダイアログ ボックスが表示されます。
[テストのタイムアウト] をクリックします。
[テストの実行時間が次の値を超えた場合、テストの実行を中止する:] チェック ボックスをオンにします。
テスト実行のタイムアウト値を時、分、および秒の単位で設定します。
[名前を付けて保存] をクリックし、[保存] をクリックし、[閉じる] をクリックします。
この設定を有効にするには、編集したテストの設定がアクティブなテストの設定である必要があります。 詳細については、「方法: テストの設定を Microsoft Visual Studio から適用する」を参照してください。
テストの設定を使用してテスト単位のタイムアウトを設定するには
ソリューション エクスプローラーを開きます。
ソリューションの [ソリューション項目] フォルダーで、テストの設定ファイルをダブルクリックします。
[テストの設定] ダイアログ ボックスが表示されます。
[テストのタイムアウト] をクリックします。
[テストの実行時間が次の値を超えた場合、個々のテストを失敗として設定する:] チェック ボックスをオンにします。
テスト単位のタイムアウト値を時、分、および秒の単位で設定します。
[名前を付けて保存] をクリックし、[保存] をクリックし、[閉じる] をクリックします。
この設定を有効にするには、編集したテストの設定がアクティブなテストの設定である必要があります。 詳細については、「方法: テストの設定を Microsoft Visual Studio から適用する」を参照してください。
テスト プロパティを使用してテスト単位のタイムアウトを設定するには
テスト リスト エディターまたはテスト ビュー ウィンドウを開きます。
テストをクリックし、F4 キーを押します。
[プロパティ] ウィンドウが開き、そのテストのプロパティが表示されます。
[タイムアウト] プロパティに、値を時、分、および秒の単位で設定します。
注意
手動テストのタイムアウト値は、[無限] です。 この値は変更できません。
このテストの場合に限り、設定した値は、テストの設定で設定されたテスト単位のタイムアウト値をオーバーライドします。 テストの実行のタイムアウト値は、影響されません。
単体テストの属性を使用してテスト単位のタイムアウトを設定するには
単体テストのソース コード ファイルを開きます。
テストの TestMethod 属性を探します。
Timeout 属性とタイムアウト値を表すパラメ―タを追加します。
タイムアウト値はミリ秒単位で表します。
例 (Visual C#):
[TestMethod(), Timeout(80)] public void MyTestMethod() { // test code }
例 (Microsoft Visual Basic):
<TestMethod(), Timeout(80)> _ Public Sub MyTestMethod() ' test code End Sub
このテストの場合に限り、設定した値は、テストの設定で設定されたテスト単位のタイムアウト値をオーバーライドします。 テストの実行のタイムアウト値は、影響されません。