JUnit - Test de dépassement de délai

JUnit - Test de délai d'attente

Si un test prend plus de temps qu'un «timeout» défini pour se terminer, unTestTimedOutException sera lancé et le test marqué a échoué. Voir l'exemple suivant:

P.S Tested with JUnit 4.12

1. Exemple de délai d'expiration

Cet exemple detimeout ne s'applique qu'à une seule méthode de test. Et la valeur du délai d'expiration est en millisecondes.

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() {
        //...
    }

}

Ce test de délai d'attente est utile pour tester les performances de la méthode.

2. Exemple de règle de temporisation globale

Cet exemple vous montre comment créer une règle de délai d'expiration globale, cette règle s'appliquera à toutes les méthodes de test d'une classe.

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() {
        //...
    }

}

Dans l'exemple ci-dessus, une règle globaleTimeout est déclarée, lestestSlowMethod1() ettestSlowMethod2() doivent terminer le test en 1 seconde, sinon le test échouera.

P.S The rule also applies on @Before and @After methods.

Note
Tous les tests unitaires doivent être rapides, et cette règle de temporisation globale doit être votre meilleure aide.