JUnit - Тест тайм-аута
Если тест длится дольше заданного «тайм-аута», будет выданTestTimedOutException и тест помечен как неудавшийся. Смотрите следующий пример:
P.S Tested with JUnit 4.12
1. Пример тайм-аута
Этот примерtimeout применим только к одному методу тестирования. Значение тайм-аута указывается в миллисекундах.
TimeoutTest.java
package com.example;
import org.junit.Test;
public class TimeoutTest {
//This test will always failed :)
@Test(timeout = 1000)
public void infinity() {
while (true) ;
}
//This test can't run more than 5 seconds, else failed
@Test(timeout = 5000)
public void testSlowMethod() {
//...
}
}
Этот тест тайм-аута полезен для проверки производительности метода.
2. Пример правила глобального тайм-аута
В этом примере показано, как создать глобальное правило тайм-аута, это правило будет применяться ко всем тестовым методам в классе.
TimeoutTest.java
package com.example;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.Timeout;
import java.util.concurrent.TimeUnit;
public class TimeoutRuleTest {
//global timeout rule
@Rule
public Timeout globalTimeout = Timeout.seconds(1);
//This test will be failed, because it will take more than 1 second to finish!
@Test
public void testSlowMethod1() throws InterruptedException {
//...
TimeUnit.SECONDS.sleep(5000);
}
//passed
@Test
public void testSlowMethod2() {
//...
}
}
В приведенном выше примере объявляется глобальное правилоTimeout, иtestSlowMethod1(), иtestSlowMethod2() должны завершить тест в течение 1 секунды, иначе тест будет провален.
P.S The rule also applies on @Before and @After methods.
Note
Все модульные тесты должны быть быстрыми, и это глобальное правило тайм-аута должно быть вашим лучшим помощником.