@Before,@BeforeClass,@BeforeEach和@BeforeAll之间的区别
主要区别是什么?
-
@Before
和@BeforeClass
- 并在JUnit 5
@BeforeEach
和@BeforeAll
- 并在JUnit 5
-
@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