Comment fonctionne Junit @Rule?

Je veux écrire des cas de test pour une grande partie du code, je voudrais connaître les détails de la @Rule annotation JUnit @Rule , pour pouvoir l’utiliser pour écrire des cas de test. S’il vous plaît fournir quelques bonnes réponses ou des liens, qui donnent une description détaillée de ses fonctionnalités à travers un exemple simple.

Les règles sont utilisées pour append des fonctionnalités supplémentaires qui s’appliquent à tous les tests d’une classe de test, mais de manière plus générique.

Par exemple, ExternalResource exécute le code avant et après une méthode de test, sans avoir à utiliser @Before et @After . L’utilisation d’un ExternalResource plutôt que de @Before et @After permet de mieux réutiliser le code; la même règle peut être utilisée à partir de deux classes de test différentes.

Le design était basé sur: Intercepteurs dans JUnit

Pour plus d’informations, voir le wiki JUnit: Rules .

Les règles de Junit fonctionnent sur le principe de l’AOP (programmation orientée aspect). Il intercepte la méthode de test, offrant ainsi la possibilité d’effectuer certaines opérations avant ou après l’exécution d’une méthode de test particulière.

Prenons l’exemple du code ci-dessous:

 public class JunitRuleTest { @Rule public TemporaryFolder tempFolder = new TemporaryFolder(); @Test public void testRule() throws IOException { File newFolder = tempFolder.newFolder("Temp Folder"); assertTrue(newFolder.exists()); } } 

Chaque fois que la méthode de test ci-dessus est exécutée, un dossier temporaire est créé et il est supprimé après l’exécution de la méthode. Voici un exemple de règle fournie par Junit.

Un comportement similaire peut également être obtenu en créant nos propres règles. Junit fournit l’interface TestRule, qui peut être implémentée pour créer notre propre règle Junit.

Voici quelques liens utiles pour référence:

J’ai trouvé que cet article explique @Rule plutôt bien, surtout la dernière section “La séquence des événements en détail”

tl; dr pour son fonctionnement: JUnit encapsule votre méthode de test dans un object Statement afin que statement.Execute () exécute votre test. Ensuite, au lieu d’appeler directement statement.Execute () pour exécuter votre test, JUnit transmet l’instruction à une TestRule avec l’annotation @Rule. La fonction “apply” de TestRule renvoie une nouvelle instruction donnée à l’instruction avec votre test. La méthode Execute () de la nouvelle déclaration peut appeler la méthode d’exécution de la déclaration de test (ou non, ou l’appeler plusieurs fois), et faire ce qu’elle veut avant et après. Maintenant, JUnit a une nouvelle instruction qui fait plus que simplement exécuter le test, et il peut encore le transmettre à d’autres règles avant d’appeler enfin Execute.