web-dev-qa-db-fra.com

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? De plus, 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 {
}
154
Sagar Varpe

Le @BeforeClass et @AfterClass Les méthodes annotées seront exécutées exactement une fois pendant votre test - au tout début et à la fin du test dans son ensemble, avant toute autre exécution. En fait, ils sont exécutés avant même que la classe de test ne soit construite, c'est pourquoi ils doivent être déclarés static.

Le @Before et @After les méthodes seront exécutées avant et après chaque cas de test, elles seront donc probablement exécutées plusieurs fois au cours d'une exécution de test.

Supposons donc que vous avez eu trois tests dans votre classe. L'ordre des appels de méthode serait le suivant:

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()
196
Andrzej Doyle

Pensez à "BeforeClass" en tant qu'initialiseur statique pour votre scénario de test - utilisez-le pour initialiser des données statiques - des éléments qui ne changent pas d'un scénario à l'autre. Vous voulez absolument faire attention aux ressources statiques qui ne sont pas thread-safe.

Enfin, utilisez la méthode annotée "AfterClass" pour nettoyer toutes les configurations effectuées dans la méthode annotée "BeforeClass" (à moins que leur autodestruction soit suffisante).

"Avant" et "Après" sont destinés à l'initialisation spécifique au test unitaire. J'utilise généralement ces méthodes pour initialiser/réinitialiser les simulacres de mes dépendances. De toute évidence, cette initialisation n’est pas spécifique à un test unitaire, mais générale à tous les tests unitaires.

15
madhurtanwani

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)

7
netbrain

De le Javadoc :

Parfois, plusieurs tests doivent partager une configuration coûteuse en calcul (comme la connexion à une base de données). Bien que cela puisse compromettre l'indépendance des tests, il s'agit parfois d'une optimisation nécessaire. Annoter un public static void méthode sans argument avec @BeforeClass il est exécuté une fois avant l’une des méthodes de test de la classe. Le @BeforeClass les méthodes des superclasses seront exécutées avant celles de la classe actuelle.

4
Justin King