首页 文章

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

提问于
浏览
0

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

那为什么我们从 @BeforeClass - Junit 4 To @BeforeEach Junit 5 更改了注释?

我还缺少在junit 5中添加的其他内容吗?

其他注释的类似情况 .

2 回答

  • 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,@ IntelClass,@ BeforeEach和@BeforeAll之间的区别 .

  • 2

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

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

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

相关问题