当前位置: 首页 > 知识库问答 >
问题:

BeforeClass(JUnit4)和BeforeEach(Junit5)之间的区别是什么

东门修文
2023-03-14

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

那么为什么我们要将注释从@BeforeClass-junit4更改为@beforecreach-Junit 5呢?

JUnit5中添加了什么我没有的东西?

其他注释的情况类似。

共有2个答案

岳浩宕
2023-03-14

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

因此,您可以对非静态方法以及接口上的默认方法使用@BeforeAll@aftereall。它还允许您在@嵌套的测试类中使用@之前@之后

如果使用生命周期。PER_CLASS您必须记住,如果您的测试依赖于实例变量中存储的状态,那么您可能必须在每个之前和之后重置该状态。

越飞鸾
2023-03-14

添加的主要功能是对测试实例生命周期进行更细粒度的控制,例如通过@TestInstance注释。我认为这是更改旧的@前@BeforeClass注释名称的原因之一。

旧的(JUnit4)@Before和新的(JUnit5)@beforeach相似,它们在测试类中的每个@Test方法之前重新执行。因此,如果您的类有10个测试方法,那么每个@before方法将执行10次。

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

因此,问题中提出的将@BeforeClass重命名为@beforeach的建议是不正确的。

有关更多信息,请参见关于@Before、@BeforeClass、@beforeach和@BeforeAll之间区别的问题。

 类似资料:
  • 问题内容: 之间的主要区别是什么 和 和JUnit中5 @BeforeEach和@BeforeAll 和 根据JUnit ,在以下情况下使用Api: 编写测试时,通常会发现几个测试需要先创建类似的对象,然后才能运行。 而可以用来建立数据库连接。但是不能一样吗? 问题答案: 标记的代码在每次测试之前执行,而在整个测试夹具之前运行一次。如果你的测试类有十个测试,则代码将执行十次,但仅执行一次。 通常,

  • 问题内容: 我们从TestNG官方文档中知道: 带注释的方法将在调用当前类中的第一个测试方法之前运行。 带注释的方法将在运行属于标签内部的类的任何测试方法之前运行。 上面的两个TestNG批注在功能上看起来都很相似。谁能解释这个独特的区别? 问题答案: SeleniumAbstractTest.class MyTestClass1.class MyTestClass2.class 如果您具有以下测

  • 在Java 7之前,JVM内存中有一个名为PermGen的区域,JVM以前在这里保存它的类。在Java 8中,它被移除并被称为元空间的区域所取代。 PermGen和Metaspace之间最重要的区别是什么? 我知道的唯一区别是,并且忽略了VM参数。

  • 和之间有什么区别? 是什么原因导致他们被扔?如何解决这些问题? 在修改现有代码以包含新的jar文件时,我经常会遇到这些可抛物。我在通过WebStart发布的一个Java应用程序的客户端和服务器端都碰到了它们。 我遇到的可能原因是: 代码客户端的中未包含的包 我们正在使用的新JAR缺少运行时类路径 版本与以前的JAR冲突 当我今天遇到这些问题时,我会采取跟踪和错误的方法来使事情正常工作。我需要更多的

  • 当我试图在Spring4.x上进行测试时,我使用了MockMvc web客户端,但我正在阅读和尝试Spring5.x的新特性。 我认为,WebTestClient和MockMvc是相同或非常相似的。 MockMvc和WebTestClient之间的区别是什么?

  • 有人能给我解释一下map和flatMap之间的区别,以及什么是各自的好用例吗? “结果扁平化”是什么意思?它有什么好处?