java - @Before、@BeforeClass、@BeforeEach 和 @BeforeAll 之间的区别

标签 java junit annotations junit4 junit5

两者的主要区别是什么

  • @Before@BeforeClass
    • 在 JUnit 5 中 @BeforeEach@BeforeAll
  • @After@AfterClass

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

When writing tests, it is common to find that several tests need similar objects created before they can run.

@BeforeClass可用于建立数据库连接。但@Before不能做同样的事情吗?

最佳答案

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

通常,当多个测试需要共享相同的计算成本高昂的设置代码时,您可以使用@BeforeClass。建立数据库连接就属于这一类。您可以将代码从 @BeforeClass 移至 @Before,但测试运行可能需要更长时间。请注意,标记为 @BeforeClass 的代码作为静态初始化程序运行,因此它将在创建测试装置的类实例之前运行。

JUnit 5中,标签 @BeforeEach@BeforeAll 相当于 JUnit 4 中的 @Before@BeforeClass。它们的名称更能说明它们何时运行,松散地解释为:“在每个测试之前”和“在所有测试之前一次”。

关于java - @Before、@BeforeClass、@BeforeEach 和 @BeforeAll 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51265057/

相关文章:

java - 如何增加线宽(Java Applet)

java - JUnit 测试失败,但结果符合预期?

java - 在 JUnit 的 setUp() 中初始化对象数组

java - 注释补充 javadoc 标签

java - 使用 Java 从 http 代理后面的 ntp 服务器检索时间

java - 线程 "main"java.lang.UnsatisfiedLinkError 3 中的异常

java - 具有特殊字符的字符串解析

testing - JUnit 4 @Test 注释实际上做了什么

java - 在 hibernate 中执行查询时,我应该如何解决异常 "Unable to resolve path"?

java - 如何将RequestBody中的对象传递给注释