7

単体テストを使用して、テストを実行する外部ツールを実行している状況があります。ツールの終了コードから、テストが成功したか、失敗したか、タイムアウトしたかを判断できます。

テスト結果を失敗ではなくタイムアウトに設定する単体テストに失敗する方法はありますか?

TimeoutExceptionをスローしようとしましたが、これはAssertを使用した場合と同じ結果になります。

編集: ユニットテストをTFSのテストケースにリンクしています。Microsoft Test Centerでは、テスト実行のテストには多くの状態があります。その1つがタイムアウト状態です。テストがこの状態で正しく表示され、失敗したテストケースに集中しないように、テストを失敗させようとしています。

4

4 に答える 4

2

それは実際には「プログラム的に」ではありませんが、次のことができます。

外部ツールがタイムアウト終了コードで戻ることを認識した場合、テストは待機する必要があります (これは「プログラム」部分になります)。

したがって、テスト フレームワークはテスト結果を「タイムアウト」に設定します。

特にテストが自動化されている場合は、適切なソリューションになると思います。

于 2012-10-01T11:05:20.047 に答える
1

ユニットテストでは、緑と赤の2色で処理します。タイムアウトの色はありません。

したがって、外部ツールがタイムアウトした場合に備えて、手動でテストに失敗する可能性があると思います。

Assert.Fail("External tool used to do this test timed out");

もちろん、外部ツールがタイムアウトしたことを検出する方法は、使用している外部ツールと、単体テストからそれを呼び出す方法によって異なります。

于 2012-09-20T12:28:24.120 に答える
0

を投げるあなたのアプローチTimeoutExceptionは良い選択のようです。ただし、 はUnitTestAssertExceptionTimeoutExceptionから派生していません。

次のいずれかを実行することをお勧めします。

  1. 理由を文字列として示すAssertFailedExceptionをスローします。

  2. UnitTestAssertExceptionをカスタムでサブクラス化UnitTestTimeOutExceptionし、それをスローします。

  3. Assert.Fail@Darin-Dimitrovが提案したように使用します。

于 2012-09-20T12:32:39.287 に答える