这两个注释都用于表示应在当前测试类中的每个Test方法之前执行带注释的方法 .
那为什么我们从 @BeforeClass - Junit 4 To @BeforeEach Junit 5 更改了注释?
我还缺少在junit 5中添加的其他内容吗?
其他注释的类似情况 .
添加的主要功能是对Test Instance Lifecycle进行更精细的控制,例如通过 @TestInstance 注释 . 我认为这是更改旧 @Before 和 @BeforeClass 注释名称的原因之一 .
@TestInstance
@Before
@BeforeClass
旧的(JUnit4) @Before 和新的(JUnit5) @BeforeEach 类似,因为它们在测试类中的每个 @Test 方法之前重新执行 . 因此,如果您的类有10个测试方法, @BeforeEach 方法将执行10次 .
@BeforeEach
@Test
旧的(JUnit4) @BeforeClass 和新的(JUnit5) @BeforeAll 类似,因为它们在类中的任何测试之前都只执行一次 . 因此,即使您的类有10个测试, @BeforeAll 方法也只执行一次 .
@BeforeAll
因此 @BeforeClass 重命名为 @BeforeEach 的问题中提出的建议是不正确的 .
有关更多信息,请参阅this question,了解@ Before,@ IntelClass,@ BeforeEach和@BeforeAll之间的区别 .
有一些相关的更改需要首先使用 @TestInstance(Lifecycle.PER_CLASS) 注释测试类 . 这将为每个测试类而不是每个方法创建一个新的测试实例 .
@TestInstance(Lifecycle.PER_CLASS)
因此,您可以将 @BeforeAll 和 @AfterAll 用于非静态方法以及接口默认方法 . 它还允许您在 @Nested 测试类中使用 @BeforeAll 和 @AfterAll .
@AfterAll
@Nested
如果使用 Lifecycle.PER_CLASS ,则必须记住,如果测试依赖于存储在实例变量中的状态,则可能必须在 @BeforeEach 和 @AfterEach 中重置该状态 .
Lifecycle.PER_CLASS
@AfterEach
2 回答
添加的主要功能是对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,@ IntelClass,@ BeforeEach和@BeforeAll之间的区别 .
有一些相关的更改需要首先使用
@TestInstance(Lifecycle.PER_CLASS)
注释测试类 . 这将为每个测试类而不是每个方法创建一个新的测试实例 .因此,您可以将
@BeforeAll
和@AfterAll
用于非静态方法以及接口默认方法 . 它还允许您在@Nested
测试类中使用@BeforeAll
和@AfterAll
.如果使用
Lifecycle.PER_CLASS
,则必须记住,如果测试依赖于存储在实例变量中的状态,则可能必须在@BeforeEach
和@AfterEach
中重置该状态 .