2012-01-18 2 views
0

Я использовал параметризованную тестовую возможность JUnit для повторного запуска одного и того же теста с различными конфигурациями. Вопрос, который у меня есть, заключается в том, соответствует ли время ожидания тесту для каждого тестового прогона индивидуально или коллективно.JUnit, таймаут для параметризованных тестов

Для более конкретно: если у меня есть тест, работающий только с одним параметром, а таймаут теста - 10 минут, то если я добавлю еще две записи для запуска того же теста, будет ли время ожидания теста 30 минут?

Если нет, то как его настроить?

+0

В принципе, вы хотите, чтобы таймаут был пропорционален размеру ввода? – dierre

ответ

4

Я просто посмотрел код JUnit, и timeout применяется при каждом выполнении метода тестирования parameterized. Прогоны для каждого набора параметров независимы.

+0

+1 Это правильно –

2

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 при необходимости для набора тестов.

+0

Отличные эксперименты! Не было времени, поэтому потребовалось сокращение. – jackrabbit

Смежные вопросы