Chapitre Les fonctionnalités avancées de JUnit
Gestion des timeouts dans vos tests unitaires
Cette leçon présente une fonctionnalité de JUNIT permettant de faire échouer les tests qui durent trop longtemps.
Dernière modification : Dec 08 , 2024
Gestion des timeouts dans vos tests unitaires
Cette fonctionnalité est pratique dans les cas suivants :
- S'assurer de la performance de certaines fonctionnalités
- Maintenir un temps de build raisonnable en cas de ralentissement du système (en forcant tous les tests unitaires à tourner sous X secondes)
Le temps d'exécution sous Java varie énormément (entre votre poste, l'intégration continue etc).
Il vaut mieux ne pas mettre des timeouts trop bas.
Exemple d'utilisation
class TimeoutDemo {
@BeforeEach
@Timeout(5)
void setUp() {
// le test échoue si le temps d'exécution du test dépasse 5 secondes
}
@Test
@Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
void echoueSiTempsExecutionSuperieurA100Millisecondes() {
// Surchage et définit le temps d'exécution maximum du test à 100ms
}
}
Configuration du timeout par propriété
JUnit 5 propose également un ensemble de propriétés pour définir une configuration globale aux tests dont les timeouts.
Propriété | Utilisation |
---|---|
junit.jupiter.execution.timeout.default | timeout pour toutes les méthodes testables et le cycle de vie |
junit.jupiter.execution.timeout.testable.method.default | timeout pour toutes les méthodes testables |
junit.jupiter.execution.timeout.test.method.default | timeout pour les méthodes @Test |
junit.jupiter.execution.timeout.testtemplate.method.default | timeout pour les méthodes @TestTemplate |
junit.jupiter.execution.timeout.testfactory.method.default | timeout pour les méthodes @TestFactory |
junit.jupiter.execution.timeout.lifecycle.method.default | timeout pour les méthodes du cycle de vie |
junit.jupiter.execution.timeout.beforeall.method.default | timeout pour les méthodes @BeforeAll |
junit.jupiter.execution.timeout.beforeeach.method.default | timeout pour les méthodes @BeforeEach |
junit.jupiter.execution.timeout.aftereach.method.default | timeout pour les méthodes @AfterEach |
junit.jupiter.execution.timeout.afterall.method.default | timeout pour les méthodes @AfterAll |
Configurer la plateforme JUnit
Pour configurer JUnit, il faut créer un fichier junit-platform.properties
par exemple dans src/test/resources
.
Il est aussi possible de passer les propriétés via le plugin Surefire de Maven :
<!-- ... -->
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<properties>
<configurationParameters>
junit.jupiter.conditions.deactivate = *
junit.jupiter.extensions.autodetection.enabled = true
junit.jupiter.testinstance.lifecycle.default = per_class
</configurationParameters>
</properties>
</configuration>
</plugin>
</plugins>
</build>