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
Все модульные тесты должны быть быстрыми, и это глобальное правило тайм-аута должно быть вашим лучшим помощником.