4

@Test2 つの部分を持つ JUnit 単体テストがあり、それらの部分を個別のメソッドに分割したくないとします。またtimeout、テスト用のパラメーターが必要だとします。

タイムアウト アサーションの失敗メッセージを変更/傍受/制御して、テストのどの部分がタイムアウトしたかを示すにはどうすればよいですか?

うまくいかない試みは次のとおりです。

@Test(timeout = 1000)
public void test() {
    try {
        // part one of the test
    } catch (Throwable e) {
        Assert.fail("Part one failed");
    }

    try {
        // part two of the test
    } catch (Throwable e) {
        Assert.fail("Part two failed");
    }
}
4

2 に答える 2

2

ドキュメントを読んでいるだけです。タイムアウトにより、テストは自動的に失敗します。これは例外をスローするのではなく、テスト ランナーによって実行されます。独自のテスト ランナーを作成することは可能ですが、それでも失敗した場所を見つけるのに苦労するでしょう。テストを別の方法で構造化することをお勧めします。テストに失敗しただけの独自のタイマーを持っている可能性があります。

于 2012-12-31T18:15:57.227 に答える
1

ご存じのように、JUnit のタイムアウト機能はかなり制限されています。もう少し機能を必要とするタイミング関連のテストには、awaitilityを使用しました。「named await」を使用してメッセージをカスタマイズできます。

with().pollInterval(ONE_HUNDERED_MILLISECONDS)
    .and().with().pollDelay(20, MILLISECONDS)
    .await("customer registration").until(
            costumerStatus(), equalTo(REGISTERED)
);
于 2012-12-31T18:14:55.600 に答える