junit
Règles de test personnalisées
Recherche…
Remarques
Il y a des avantages pour l'un ou l'autre. L'extension de ExternalResource
est pratique, surtout si nous avons seulement besoin d'un before()
pour définir quelque chose.
Cependant, nous devrions être conscients que, puisque la méthode before()
est exécutée en dehors de l’ try...finally
, tout code devant être nettoyé dans after()
ne sera pas exécuté en cas d’erreur pendant la exécution de before()
.
Voici à quoi cela ressemble dans ExternalResource
:
before();
try {
base.evaluate();
} finally {
after();
}
De toute évidence, si une exception est lancée dans le test lui-même, ou par une autre règle imbriquée, l’après sera toujours exécuté.
@TestRule personnalisé par implémentation
Ceci est particulièrement utile si nous avons une classe que nous voulons étendre dans la règle. Voir l'exemple ci-dessous pour une méthode plus pratique.
import org.junit.rules.TestRule; import org.junit.runners.model.Statement; public class AwesomeTestRule implements TextRule { @Override public Statement apply(Statement base, Description description) { return new AwesomeStatement(base); } private static class AwesomeStatement extends Statement { private Statement base; public AwesomeStatement(Statement base) { this.base = base; } @Override public void evaluate() throws Throwable { try { // do your magic base.evaluate(); // this will call Junit to run an individual test } finally { // undo the magic, if required } } } }
Custom @TestRule par extension
JUnit a une implémentation abstraite de @TestRule
qui vous permet d'écrire une règle d'une manière plus simple. Ceci s'appelle ExternalResource
et fournit deux méthodes protégées qui peuvent être étendues comme ceci:
public class AwesomeTestRule extends ExternalResource { @Override protected void before() { // do your magic } @Override protected void after() { // undo your magic, if needed } }