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

@Before、@BeforeClass、@beforeach和@BeforeAll之间的差异

罗智刚
2023-03-14

之间的主要区别是什么

  • @在课前@在课前

根据JUnit Api@前用于以下情况:

编写测试时,通常会发现一些测试在运行之前需要创建类似的对象。

@BeforeClass可用于建立数据库连接。但是以前的@就不能这样做吗?


共有3个答案

谷梁振
2023-03-14

JUnit中的课前和课前

带有@test注释的类中的每个测试函数之前,将执行@Before注释之前的函数,但带有@Before注释的函数将仅在类中所有测试函数之前执行一次。

类似地,带有@After注释的函数将在带有@test注释的类中的每个测试函数之后执行,但是带有@AfterClass的函数将仅在类中的所有测试函数之后执行一次。

样本类

public class SampleClass {
    public String initializeData(){
        return "Initialize";
    }

    public String processDate(){
        return "Process";
    }
 }

抽样测试

public class SampleTest {

    private SampleClass sampleClass;

    @BeforeClass
    public static void beforeClassFunction(){
        System.out.println("Before Class");
    }

    @Before
    public void beforeFunction(){
        sampleClass=new SampleClass();
        System.out.println("Before Function");
    }

    @After
    public void afterFunction(){
        System.out.println("After Function");
    }

    @AfterClass
    public static void afterClassFunction(){
        System.out.println("After Class");
    }

    @Test
    public void initializeTest(){
        Assert.assertEquals("Initailization check", "Initialize", sampleClass.initializeData() );
    }

    @Test
    public void processTest(){
        Assert.assertEquals("Process check", "Process", sampleClass.processDate() );
    }

}

输出

Before Class
Before Function
After Function
Before Function
After Function
After Class

初中五年级

@Before = @BeforeEach
@BeforeClass = @BeforeAll
@After = @AfterEach
@AfterClass = @AfterAll

宰父衡
2023-03-14

每个注释之间的区别是:

+-------------------------------------------------------------------------------------------------------+
¦                                       Feature                            ¦   Junit 4    ¦   Junit 5   ¦
¦--------------------------------------------------------------------------+--------------+-------------¦
¦ Execute before all test methods of the class are executed.               ¦ @BeforeClass ¦ @BeforeAll  ¦
¦ Used with static method.                                                 ¦              ¦             ¦
¦ For example, This method could contain some initialization code          ¦              ¦             ¦
¦-------------------------------------------------------------------------------------------------------¦
¦ Execute after all test methods in the current class.                     ¦ @AfterClass  ¦ @AfterAll   ¦
¦ Used with static method.                                                 ¦              ¦             ¦
¦ For example, This method could contain some cleanup code.                ¦              ¦             ¦
¦-------------------------------------------------------------------------------------------------------¦
¦ Execute before each test method.                                         ¦ @Before      ¦ @BeforeEach ¦
¦ Used with non-static method.                                             ¦              ¦             ¦
¦ For example, to reinitialize some class attributes used by the methods.  ¦              ¦             ¦
¦-------------------------------------------------------------------------------------------------------¦
¦ Execute after each test method.                                          ¦ @After       ¦ @AfterEach  ¦
¦ Used with non-static method.                                             ¦              ¦             ¦
¦ For example, to roll back database modifications.                        ¦              ¦             ¦
+-------------------------------------------------------------------------------------------------------+

两个版本中的大多数注释是相同的,但很少有不同之处。

参考

执行命令。

虚线框-

贲功
2023-03-14

在每个测试之前执行标记为@Before的代码,而@BeforeClass在整个测试夹具之前运行一次。如果测试类有十个测试,@Before代码将执行十次,但@BeforeClass将只执行一次。

通常,当多个测试需要共享相同的计算开销较大的设置代码时,可以使用@BeforeClass。建立数据库连接属于这一类。您可以将代码从@BeforeClass移动到@BeforeClass,但测试运行可能需要更长的时间。请注意,标记为@BeforeClass的代码作为静态初始值设定项运行,因此它将在创建测试夹具的类实例之前运行。

在JUnit5中,标记@beforeach@BeforeAll与JUnit4中的@BeforeClass等价。它们的名称更能指示它们运行的时间,松散地解释为:“在每个测试之前”和“在所有测试之前一次”。

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

  • 问题内容: 我刚刚看到了包含标签的CSS代码。我看着MDN看看是什么,但我真的不明白。 有人可以解释它是如何工作的吗? 它会在我们通过CSS选择之前创建DOM元素吗? 问题答案: 根据这些文档,它们是等效的: 唯一的区别是CSS3中使用了双冒号,而单冒号是旧版本。 推理: CSS 3中引入了:: before表示法,以便在伪类和伪元素之间建立区别。浏览器还接受:在CSS 2中引入的表示法。

  • 问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。

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

  • 我编写了一个简单的脚本,它接受任意数量的参数来演示< code>$@和< code>$*之间的区别: 在我做的 CLI 上 这就是打印出来的 因为它们是相同的,这是否意味着等于?还是我遗漏了一点?

  • 问题内容: package main 该代码可以很好地工作。但是,如果按如下所示更改方法,则会导致死循环。区别在于将替换为。为什么? 问题答案: 因为程序包检查要打印的值是否具有方法(或换句话说:是否实现接口),如果是,则将调用它以获取值的表示形式。 软件包doc中对此进行了说明: […]如果操作数实现String()字符串方法,则将调用该方法将对象转换为字符串,然后根据动词的要求对其进行格式化(