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

主要区别是什么?

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

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

编写testing时,通常会发现多个testing需要在运行之前创build类似的对象。

@BeforeClass可以用来build立数据库连接。 但不能@Before做同样的?

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

一般来说,当多个testing需要共享相同的计算昂贵的设置代码时,您使用@BeforeClass 。 build立数据库连接属于这个类别。 您可以将@BeforeClass代码移动到@Before ,但是您的testing运行可能需要更长的时间。 请注意,标记为@BeforeClass的代码是作为静态初始化程序运行的,因此它将在创buildtesting夹具的类实例之前运行。

在JUnit 5中 ,标记@BeforeEach@BeforeAll是JUnit 4中的@Before@BeforeClass的等价物。它们的名字更多地指示它们何时运行,松散地解释:“在每次testing之前”和“在所有testing之前”。

每个注释之间的区别是:

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

这两个版本中的大部分注释都是相同的,但很less有不同。

执行顺序。

虚线框 – >可选的注释。

在这里输入图像描述

Junit 5