Oznaczony kod @Beforejest wykonywany przed każdym testem, a @BeforeClassuruchamia się raz przed całym urządzeniem testowym. Jeśli klasa testowa ma dziesięć testów, @Beforekod zostanie wykonany dziesięć razy, ale @BeforeClasszostanie wykonany tylko raz.
Zasadniczo używa się go, @BeforeClassgdy wiele testów wymaga współużytkowania tego samego kosztownego obliczeniowo kodu instalacyjnego. Nawiązanie połączenia z bazą danych należy do tej kategorii. Można przenieść kod @BeforeClassdo @Before, ale twój test nie może trwać dłużej. Zauważ, że zaznaczony kod @BeforeClassjest uruchamiany jako inicjator statyczny, dlatego będzie działał przed utworzeniem instancji klasy urządzenia testowego.
W JUnit 5 tagi@BeforeEach i @BeforeAllsą ekwiwalentów @Beforeoraz @BeforeClassw JUnit 4. Ich nazwy są nieco bardziej wskazuje kiedy biegać, luźno interpretować: „przed każdym testów” i „kiedyś wszystkich testów”.
Dodam tylko, że @BeforeAllmogą być niestatyczne i wzywam przy każdym nowym uruchomieniu instancji testowej. Zobacz odpowiednią odpowiedź stackoverflow.com/a/55720750/1477873
Sergey
124
Różnice między każdą adnotacją są następujące:
+-------------------------------------------------------------------------------------------------------+¦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.¦¦¦+-------------------------------------------------------------------------------------------------------+
Większość adnotacji w obu wersjach jest taka sama, ale niewiele się różni.
@BeforeAdnotacja funkcji zostanie wykonana przed każdą funkcją testową w klasie posiadającej @Testadnotację, ale funkcja z @BeforeClasszostanie wykonana tylko jeden raz przed wszystkimi funkcjami testowymi w klasie.
Podobnie funkcja z @Afteradnotacją zostanie wykonana po każdej funkcji testowej w klasie posiadającej @Testadnotację, ale funkcja z@AfterClass zostanie wykonana tylko raz po wszystkich funkcjach testowych w klasie.
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())}}
Taki sam jak
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
jest statyczny. Działa przed utworzeniem instancji klasy testowej.@BeforeAll
mogą być niestatyczne i wzywam przy każdym nowym uruchomieniu instancji testowej. Zobacz odpowiednią odpowiedź stackoverflow.com/a/55720750/1477873Różnice między każdą adnotacją są następujące:
Większość adnotacji w obu wersjach jest taka sama, ale niewiele się różni.
Odniesienie
Kolejność wykonania.
Pole przerywane -> opcjonalna adnotacja.
źródło
Before and BeforeClass w JUnit
@Before
Adnotacja funkcji zostanie wykonana przed każdą funkcją testową w klasie posiadającej@Test
adnotację, ale funkcja z@BeforeClass
zostanie wykonana tylko jeden raz przed wszystkimi funkcjami testowymi w klasie.Podobnie funkcja z
@After
adnotacją zostanie wykonana po każdej funkcji testowej w klasie posiadającej@Test
adnotację, ale funkcja z@AfterClass
zostanie wykonana tylko raz po wszystkich funkcjach testowych w klasie.SampleClass
Próbny test
Wynik
W Junit 5
źródło
Taki sam jak
źródło