两个注释都用于表示在当前测试类中的每个Test方法之前应该执行带注释的方法。
那么我们为什么要将注释从 @BeforeClass - Junit 4更改为@BeforeEach Junit 5 ?
在junit 5中添加了哪些我缺少的附加内容?
其他注释的类似情况。
答案 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之间的区别。