BeforeClass(Junit 4)和BeforeEach(Junit5)有什么区别

时间:2017-12-27 13:32:14

标签: junit junit4 junit5

两个注释都用于表示在当前测试类中的每个Test方法之前应该执行带注释的方法。

那么我们为什么要将注释从 @BeforeClass - Junit 4更改为@BeforeEach Junit 5

在junit 5中添加了哪些我缺少的附加内容?

其他注释的类似情况。

2 个答案:

答案 0 :(得分:2)

有一些相关的更改要求首先使用@TestInstance(Lifecycle.PER_CLASS)对测试类进行注释。这将为每个测试类而不是每个方法创建一个新的测试实例。

因此,您可以将@BeforeAll@AfterAll用于非静态方法以及接口默认方法。它还允许您在@BeforeAll测试类中使用@AfterAll@Nested

如果您使用Lifecycle.PER_CLASS,则必须记住,如果您的测试依赖于存储在实例变量中的状态,则可能必须在@BeforeEach@AfterEach中重置该状态。

答案 1 :(得分:1)

添加的主要功能是对Test Instance Lifecycle进行更精细的控制,例如通过@TestInstance注释。我认为这是更改旧@Before@BeforeClass注释名称的原因之一。

旧的(JUnit4)@Before和新的(JUnit5)@BeforeEach是相似的,因为它们在测试中的每个 @Test方法之前重新执行类。因此,如果您的类有10个测试方法,@BeforeEach方法将执行10次。

旧的(JUnit4)@BeforeClass和新的(JUnit5)@BeforeAll类似,因为在类中的任何测试之前它们都只执行一次 。因此,即使您的班级有10个测试,@BeforeAll方法也只执行一次。

@BeforeClass重命名为@BeforeEach的问题中的建议因此不正确

有关更多信息,另请参阅this question @Before,@ BeforeClass,@ BeforeEach和@BeforeAll之间的区别。