Помеченный код @Beforeвыполняется перед каждым тестом, а @BeforeClassвыполняется один раз перед всем тестовым прибором. Если ваш тестовый класс имеет десять тестов, @Beforeкод будет выполнен десять раз, но @BeforeClassбудет выполнен только один раз.
Как правило, вы используете, @BeforeClassкогда несколько тестов должны использовать один и тот же дорогостоящий код установки. Установление соединения с базой данных попадает в эту категорию. Вы можете переместить код из @BeforeClassв @Before, но ваш тестовый запуск может занять больше времени. Обратите внимание, что помеченный код @BeforeClassзапускается как статический инициализатор, поэтому он будет выполняться до создания экземпляра класса вашего тестового устройства.
В JUnit 5 теги @BeforeEachи @BeforeAllявляются эквивалентами @Beforeи @BeforeClassв JUnit 4. Их имена немного более показательны, когда они выполняются, в некоторой степени интерпретируются: «перед каждым тестом» и «один раз перед всеми тестами».
Я добавлю только то, что @BeforeAllможет быть нестатичным и вызывать при каждом новом запуске тестового экземпляра. См. Соответствующий ответ stackoverflow.com/a/55720750/1477873
Сергей
124
Разница между каждой аннотацией:
+-------------------------------------------------------------------------------------------------------+¦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.¦¦¦+-------------------------------------------------------------------------------------------------------+
Большинство аннотаций в обеих версиях одинаковы, но мало отличаются.
@BeforeАннотация функции будет выполняться перед каждой тестовой функцией в классе, имеющей @Testаннотацию, но функция с @BeforeClassбудет выполнена только один раз перед всеми тестовыми функциями в классе.
Аналогичным образом функция с @Afterаннотацией будет выполняться после каждой тестовой функции в классе, имеющей @Testаннотацию, но функция с @AfterClassбудет выполняться только один раз после всех тестовых функций в классе.
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())}}
Такой же как
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
является статическим. Он запускается до создания экземпляров тестового класса.@BeforeAll
может быть нестатичным и вызывать при каждом новом запуске тестового экземпляра. См. Соответствующий ответ stackoverflow.com/a/55720750/1477873Разница между каждой аннотацией:
Большинство аннотаций в обеих версиях одинаковы, но мало отличаются.
Ссылка
Порядок исполнения.
Штриховая рамка -> дополнительная аннотация.
источник
До и Перед Классом в JUnit
@Before
Аннотация функции будет выполняться перед каждой тестовой функцией в классе, имеющей@Test
аннотацию, но функция с@BeforeClass
будет выполнена только один раз перед всеми тестовыми функциями в классе.Аналогичным образом функция с
@After
аннотацией будет выполняться после каждой тестовой функции в классе, имеющей@Test
аннотацию, но функция с@AfterClass
будет выполняться только один раз после всех тестовых функций в классе.SampleClass
Образец теста
Вывод
5 июня
источник
Такой же как
источник