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, а не ошибка тайм-аута. Но, по крайней мере, это время. Это может быть использовано в Suite при необходимости для набора тестов.
В принципе, вы хотите, чтобы таймаут был пропорционален размеру ввода? – dierre