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.