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 之间的区别。
这两个注解都用于表示被注解的方法应该在当前测试中的每个测试方法之前执行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 之间的区别。