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

What is difference between BeforeClass (Junit 4 ) and BeforeEach(Junit5)

这两个注解都用于表示被注解的方法应该在当前测试中的每个测试方法之前执行class。

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

junit 5 中是否添加了我遗漏的任何其他内容?

其他注释的情况类似。

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

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

中使用 @BeforeAll@AfterAll

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

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

旧的(JUnit4)@Before和新的(JUnit5)@BeforeEach相似之处在于它们在每个之前重新执行@Test 测试中的方法 class。所以如果你的class有10个测试方法,那么@BeforeEach方法就会执行10次。

旧的 (JUnit4) @BeforeClass 和新的 (JUnit5) @BeforeAll 相似之处在于它们都只执行 一次,然后再执行任何操作class 中的测试。因此,即使您的 class 有 10 个测试,@BeforeAll 方法也只执行一次。

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

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