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
    }

}



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow