JUnitのパラメータ化されたテスト機能を使用して、異なるテストで同じテストを繰り返し実行しました。私が持っている質問は、テストのタイムアウトが個々のテストの実行に適用されるかどうかです。JUnit、パラメータ化されたテストのタイムアウト
具体的には、1つのパラメータでのみテストを実行し、テストのタイムアウトが10分の場合、同じテストを実行するためにさらに2つのエントリを追加すると、テストのタイムアウトは30分?
もしそうでなければ、どうすれば設定できますか?
JUnitのパラメータ化されたテスト機能を使用して、異なるテストで同じテストを繰り返し実行しました。私が持っている質問は、テストのタイムアウトが個々のテストの実行に適用されるかどうかです。JUnit、パラメータ化されたテストのタイムアウト
具体的には、1つのパラメータでのみテストを実行し、テストのタイムアウトが10分の場合、同じテストを実行するためにさらに2つのエントリを追加すると、テストのタイムアウトは30分?
もしそうでなければ、どうすれば設定できますか?
jackrabbitは、タイムアウトが各実行に適用され、メソッドには適用されないと言ったときに正しいと言います。これは彼の答えの拡張です。一例として、次のコードを使用した:
@RunWith(Parameterized.class)
public class ParameterWithTimeoutTest {
@Parameters
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][] {{ 5 }, { 2 }, { 1 }});
}
private long input;
public ParameterWithTimeoutTest(long input) {
this.input = input;
}
@Test(timeout=3000)
public void testTimeout() throws Exception {
Thread.sleep(input*1000);
}
}
testTimeout
方法は、それぞれのパラメータ5、2,1と、三回実行されます。タイムアウトにより、最初の実行だけが失敗します。
あなたはクラスの実行時にグローバルタイムアウトを設定したい場合は、@ClassRule Timeout使用することができます。
public class ParameterWithTimeoutTest {
@ClassRule
public static final TestRule globalTimeout = new Timeout(5000);
@Parameters
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][] {{ 5 }, { 2 }, { 1 }});
}
// ...
をしかし、これはInteruptedException、ないタイムアウトエラーで失敗します。しかし、少なくともそれはタイムアウトします。これは、一連のテストに必要な場合にスイートで使用できます。
優れた実験!時間がなかったので、ショートカットを取った。 – jackrabbit
基本的にタイムアウトは入力のサイズに比例しますか? – dierre