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