Dans mon projet, je dois faire quelques configurations 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 à ajouter 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émontage après l'exécution de tous vos tests. Aucun auditeur requis, 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 le document Java JUnit . Vous pouvez l'utiliser même avec le plugin surfire (tests unitaires) ou le plugin failafe (tests d'intégration) de Maven en ajoutant le code suivant dans la configuration du plugin:
<properties>
<property>
<name>listener</name>
<value>com.innovatrics.afismq.it.TestListener</value>
</property>
</properties>
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()
{
...
}
}
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'.