Der markierte Code @Beforewird vor jedem Test ausgeführt, während er @BeforeClasseinmal vor dem gesamten Testgerät ausgeführt wird. Wenn Ihre Testklasse zehn Tests enthält, wird der @BeforeCode zehnmal ausgeführt, jedoch @BeforeClassnur einmal.
Im Allgemeinen verwenden Sie diese Option, @BeforeClasswenn mehrere Tests denselben rechenintensiven Setup-Code verwenden müssen. Das Herstellen einer Datenbankverbindung fällt in diese Kategorie. Sie können Code von @BeforeClassin verschieben @Before, aber Ihr Testlauf kann länger dauern. Beachten Sie, dass der markierte Code @BeforeClassals statischer Initialisierer ausgeführt wird. Daher wird er ausgeführt, bevor die Klasseninstanz Ihres Testgeräts erstellt wird.
In JUnit 5 sind die Tags @BeforeEachund @BeforeAlldie Entsprechungen von @Beforeund @BeforeClassin JUnit 4. Ihre Namen geben etwas mehr Aufschluss darüber, wann sie ausgeführt werden, und werden lose interpretiert: "vor jedem Test" und "einmal vor allen Tests".
Ich werde nur hinzufügen, dass dies @BeforeAllmöglicherweise nicht statisch ist, und bei jedem neuen Testinstanzlauf aufrufen. Siehe die entsprechende Antwort stackoverflow.com/a/55720750/1477873
Sergey
124
Der Unterschied zwischen den einzelnen Anmerkungen ist:
+-------------------------------------------------------------------------------------------------------+¦Feature¦Junit4¦Junit5¦¦--------------------------------------------------------------------------+--------------+-------------¦¦Execute before all test methods of the class are executed.¦@BeforeClass¦@BeforeAll¦¦Used with static method.¦¦¦¦For example,This method could contain some initialization code ¦¦¦¦-------------------------------------------------------------------------------------------------------¦¦Execute after all test methods in the current class.¦@AfterClass¦@AfterAll¦¦Used with static method.¦¦¦¦For example,This method could contain some cleanup code.¦¦¦¦-------------------------------------------------------------------------------------------------------¦¦Execute before each test method.¦@Before¦@BeforeEach¦¦Used with non-static method.¦¦¦¦For example, to reinitialize some class attributes used by the methods.¦¦¦¦-------------------------------------------------------------------------------------------------------¦¦Execute after each test method.¦@After¦@AfterEach¦¦Used with non-static method.¦¦¦¦For example, to roll back database modifications.¦¦¦+-------------------------------------------------------------------------------------------------------+
Die meisten Anmerkungen in beiden Versionen sind gleich, unterscheiden sich jedoch nur wenige.
Die Funktionsanmerkung @Beforewird vor jeder Testfunktion in der Klasse mit @TestAnmerkung ausgeführt, aber die Funktion mit @BeforeClasswird nur einmal vor allen Testfunktionen in der Klasse ausgeführt.
In ähnlicher Weise wird eine Funktion mit @AfterAnnotation nach jeder Testfunktion in der Klasse ausgeführt, die eine @TestAnnotation hat, aber die Funktion mit@AfterClass wird nur einmal nach allen Testfunktionen in der Klasse ausgeführt.
import org.junit.Assertimport org.junit.Beforeimport org.junit.BeforeClassimport org.junit.TestclassFeatureTest{
companion object {private lateinit var heavyFeature:HeavyFeature@BeforeClass@JvmStatic
fun beforeHeavy(){
heavyFeature =HeavyFeature()}}private lateinit var feature:Feature@Before
fun before(){
feature =Feature()}@Test
fun testCool(){Assert.assertTrue(heavyFeature.cool())Assert.assertTrue(feature.cool())}@Test
fun testWow(){Assert.assertTrue(heavyFeature.wow())Assert.assertTrue(feature.wow())}}
Gleich wie
import org.junit.Assertimport org.junit.TestclassFeatureTest{
companion object {private val heavyFeature =HeavyFeature()}private val feature =Feature()@Test
fun testCool(){Assert.assertTrue(heavyFeature.cool())Assert.assertTrue(feature.cool())}@Test
fun testWow(){Assert.assertTrue(heavyFeature.wow())Assert.assertTrue(feature.wow())}}
@BeforeClas
ist statisch. Es wird ausgeführt, bevor Testklasseninstanzen erstellt werden.@BeforeAll
möglicherweise nicht statisch ist, und bei jedem neuen Testinstanzlauf aufrufen. Siehe die entsprechende Antwort stackoverflow.com/a/55720750/1477873Der Unterschied zwischen den einzelnen Anmerkungen ist:
Die meisten Anmerkungen in beiden Versionen sind gleich, unterscheiden sich jedoch nur wenige.
Referenz
Ausführungsreihenfolge.
Gestricheltes Feld -> optionale Anmerkung.
quelle
Before und BeforeClass in JUnit
Die Funktionsanmerkung
@Before
wird vor jeder Testfunktion in der Klasse mit@Test
Anmerkung ausgeführt, aber die Funktion mit@BeforeClass
wird nur einmal vor allen Testfunktionen in der Klasse ausgeführt.In ähnlicher Weise wird eine Funktion mit
@After
Annotation nach jeder Testfunktion in der Klasse ausgeführt, die eine@Test
Annotation hat, aber die Funktion mit@AfterClass
wird nur einmal nach allen Testfunktionen in der Klasse ausgeführt.SampleClass
SampleTest
Ausgabe
In Junit 5
quelle
Gleich wie
quelle