155 votes

Différence entre setUp () et setUpBeforeClass ()

Lors des tests unitaires avec JUnit, il existe deux méthodes similaires, setUp() et setUpBeforeClass() . Quelle est la différence entre ces méthodes? Aussi, quelle est la différence entre tearDown() et tearDownAfterClass() ?

Voici les signatures:

 @BeforeClass
public static void setUpBeforeClass() throws Exception {
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}
 

197voto

Andrzej Doyle Points 52541

L' @BeforeClass et @AfterClass annoté méthodes sera exécuté qu'une seule fois lors de votre essai - au début et à la fin de l'épreuve dans son ensemble, avant toute autre chose est de s'exécuter. En fait, ils sont à exécuter avant la classe de test est même construit, qui est pourquoi ils doivent être déclarés static.

L' @Before et @After des méthodes à exécuter avant et après chaque cas de test, de sorte que sera probablement exécuter plusieurs fois au cours de l'exécution d'un test.

Supposons donc avez-vous eu trois tests dans votre classe, l'ordre des appels de méthode serait:

setUpBeforeClass()

  (Test class first instance constructed and the following methods called on it)
    setUp()
    test1()
    tearDown()

  (Test class second instance constructed and the following methods called on it)
    setUp()
    test2()
    tearDown()

  (Test class third instance constructed and the following methods called on it)
    setUp()
    test3()
    tearDown()

tearDownAfterClass()

15voto

madhurtanwani Points 946

Pensez à "BeforeClass" comme un initialiseur statique pour votre cas de test à utiliser pour l'initialisation des données statiques - des choses qui ne changent pas à travers vos cas de test. Vous voulez certainement être prudent sur les ressources statiques qui ne sont pas thread-safe.

Enfin, l'utilisation de la "AfterClass", annoté méthode pour nettoyer toute la configuration que vous avez fait dans le "BeforeClass" méthode annotée (à moins que leur auto-destruction est assez bon).

"Avant" et "Après" sont pour le test de l'unité d'initialisation spécifique. Je l'utilise généralement ces méthodes pour initialiser / re-initialiser l'on se moque de mes dépendances. Évidemment, cette initialisation n'est pas spécifique à une unité de test, mais en général pour tous les tests unitaires.

7voto

netbrain Points 3591

setUpBeforeClass est exécuté avant toute exécution de méthode juste après le constructeur (exécuté une seule fois)

setUp est exécuté avant chaque exécution de méthode

tearDown est exécuté après chaque exécution de méthode

tearDownAfterClass est exécuté après toutes les autres exécutions de méthode, est la dernière méthode à être exécutée. (exécuté seulement une fois deconstructor)

5voto

Justin King Points 882

À partir de la Javadoc:

Parfois, plusieurs tests ont besoin de partager coûteuse en ressources informatiques de l'installation (comme l'enregistrement dans une base de données). Tout ce qui peut compromettre l'indépendance de tests, il est parfois nécessaire d'optimisation. Annoter une public static void non-arg méthode @BeforeClass causes il être exécuté une seule fois avant les méthodes d'essai de la classe. L' @BeforeClass méthodes de super-classes sera exécuté avant ceux de la classe en cours.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X