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

2022-08-31 04:25:46

主要区别是什么

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

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

编写测试时,通常会发现多个测试需要创建类似的对象才能运行。

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


答案 1

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

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

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


答案 2

每个注释之间的区别是:

+-------------------------------------------------------------------------------------------------------+
¦                                       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.                        ¦              ¦             ¦
+-------------------------------------------------------------------------------------------------------+

两个版本中的大多数注释都是相同的,但几乎没有区别。

参考

执行顺序。

虚线框 ->可选批注。

enter image description here


推荐