JUnit - Тест тайм-аута

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