Nettoyage après tous les tests junit

Dans mon projet, je dois faire une configuration de référentiel avant tous les tests. Ceci est fait en utilisant des règles statiques délicates. Cependant, je ne sais pas comment faire pour nettoyer après tous les tests. Je ne veux pas garder un nombre statique magique faisant référence au nombre de toutes les méthodes de test, que je devrais maintenir tout le temps.

La méthode la plus appréciée consiste à append un auditeur qui sera appelé après tous les tests. Y at-il une interface pour cela déjà dans JUnit4?


edit: cela n’a rien à voir avec @BeforeClass et @AfterClass, car je dois savoir si la méthode annotée avec @AfterClass est invoquée pour la dernière fois.

J’utilise JUnit 4.9. Cela aidera-t-il ?:

import junit.framework.TestCase; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({First.class,Second.class,Third.class}) public class RunTestSuite extends TestCase { @BeforeClass public static void doYourOneTimeSetup() { ... } @AfterClass public static void doYourOneTimeTeardown() { ... } } 

Edit: Je suis tout à fait convaincu (à moins que je ne comprenne mal votre question) que ma solution correspond à ce que vous recherchez. c’est-à-dire une méthode de déassembly après l’exécution de tous vos tests. Aucun auditeur requirejs, JUnit a cette installation. Merci.

Je recommande d’utiliser org.junit.runner.notification.RunListener , exemple:

 public class TestListener extends RunListener { @Override public void testRunStarted(Description description) throws Exception { // Called before any tests have been run. } @Override public void testRunFinished(Result result) throws Exception { // Called when all tests have finished } } 

Lisez plus directement dans JUnit Java doc. Vous pouvez l’utiliser même avec le plugin surfire (tests unitaires) ou failafe (tests d’intégration) de Maven en ajoutant le code suivant dans la configuration du plugin:

   listener com.innovasortingcs.afismq.it.TestListener   

Je viens de rencontrer le même problème.
Ma solution:

  • Pour une configuration globale: utilisez singleton (lazy) pour accéder à quelque chose de global qui nécessite une instanciation avant les tests. Le premier test qui accède à ce singleton déclenchera le processus de configuration globale.
  • Pour un déassembly global: utilisez un hook d’arrêt Java:
     Runtime.getRuntime().addShutdownHook(new Thread(() -> do_your_global_cleanup()))); 

Vous pouvez toujours écrire votre TestRunner personnalisé. Cependant, avant de faire cela, vous devez évaluer la nécessité de la même chose. Il vaut mieux utiliser @BeforeClass et @AfterClass. Un autre exemple que je peux citer est la manière dont hibernate permet aux utilisateurs de faire des tests unitaires en utilisant ‘import.sql’.

Pas besoin d’utiliser la suite, ajoutez simplement @BeforeClass et @AfterClass en tant que statique

 public class Tests { @BeforeClass public static void doYourOneTimeSetup() { ... } @AfterClass public static void doYourOneTimeTeardown() { ... } @Test public void testYourTestcase() { ... } }