主要的区别是什么
@Before和@BeforeClass 在JUnit 5中@BeforeEach和@BeforeAll @课后和@课后
根据JUnit Api, @Before用于以下情况:
在编写测试时,经常会发现几个测试在运行之前需要创建类似的对象。
而@BeforeClass可以用来建立数据库连接。但是@Before不能做同样的事情吗?
主要的区别是什么
@Before和@BeforeClass 在JUnit 5中@BeforeEach和@BeforeAll @课后和@课后
根据JUnit Api, @Before用于以下情况:
在编写测试时,经常会发现几个测试在运行之前需要创建类似的对象。
而@BeforeClass可以用来建立数据库连接。但是@Before不能做同样的事情吗?
当前回答
@BeforeClass将在整个测试套件之前运行,而@Before将在每个测试之前运行,而@BeforeClass将在整个测试fixture之前运行一次。如果测试类有10个测试,@Before代码将执行10次,但@BeforeClass将只执行一次。
其他回答
所有这些注释之间的基本区别如下
@BeforeEach -用于在每个测试方法(例如安装)之前运行一个公共代码 执行。类似于JUnit 4的@Before。 @AfterEach——用于在每个测试方法执行后(例如tearDown)运行公共代码。类似于JUnit 4的@After。 @BeforeAll -用于在任何测试执行之前运行每个类一次。类似于JUnit 4的@BeforeClass。 @AfterAll -用于在所有测试执行后每个类运行一次。类似于JUnit 4的@AfterClass。
所有这些注释和用法都在Codingeek - Junit5测试生命周期中定义
@BeforeClass将在整个测试套件之前运行,而@Before将在每个测试之前运行,而@BeforeClass将在整个测试fixture之前运行一次。如果测试类有10个测试,@Before代码将执行10次,但@BeforeClass将只执行一次。
每个注释之间的区别是:
+-------------------------------------------------------------------------------------------------------+
¦ Feature ¦ Junit 4 ¦ Junit 5 ¦
¦--------------------------------------------------------------------------+--------------+-------------¦
¦ 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. ¦ ¦ ¦
+-------------------------------------------------------------------------------------------------------+
两个版本中的大多数注释是相同的,但很少不同。
参考
执行顺序。
虚线框->可选注释。
JUnit @BeforeEach, @AfterEach, @BeforeAll, @AfterAll
@BeforeEach(JUnit5) -在每次测试之前调用方法
@AfterEach(JUnit5) -方法在每次测试后被调用
@BeforeClass(JUnit4) -> @BeforeAll(JUnit5) -在执行该类中的所有测试之前调用静态方法。它可以是一个大的任务启动服务器,读取文件,使db连接…
@AfterClass(JUnit4) -> @AfterAll(JUnit5) -在执行该类中的所有测试后调用静态方法。
import org.junit.Assert
import org.junit.Before
import org.junit.BeforeClass
import org.junit.Test
class FeatureTest {
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.Assert
import org.junit.Test
class FeatureTest {
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())
}
}