web-dev-qa-db-fra.com

Nettoyage après tous les tests junit

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.

37

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.

38
HellishHeat

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>
39
Juraj Michalak

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()
    {
        ...
    }
}
0
serup

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'.

0
questzen