+-------------------------------------------------------------------------------------------------------+
¦ 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. ¦ ¦ ¦
+-------------------------------------------------------------------------------------------------------+
7条答案
按热度按时间k3fezbri1#
标记为
@Before
的代码在每次测试之前执行,而@BeforeClass
在整个测试夹具之前运行一次。如果您的测试类有十个测试,@Before
代码将执行十次,但@BeforeClass
将只执行一次。一般来说,当多个测试需要共享计算开销很大的相同设置代码时,您可以使用
@BeforeClass
。建立数据库连接福尔斯这一类。您可以将代码从@BeforeClass
移动到@Before
,但您的测试运行可能需要更长的时间。请注意,标记为@BeforeClass
的代码是作为静态初始化程序运行的,因此它将在测试fixture的类示例创建之前运行。在JUnit 5中,标记
@BeforeEach
与@BeforeAll
相当于JUnit 4中得@Before
与@BeforeClass
.它们得名称更多地表示它们得运行时间,解释得比较松散:“每次测试前”和“所有测试前一次”。ruarlubt2#
每个注解之间的差异是:
两个版本中的注解大部分相同,但很少有不同。
Reference
执行命令。
虚线框-〉可选注解。
dbf7pr2w3#
JUnit中的Before和BeforeClass
函数
@Before
注解将在具有@Test
注解的类中的每个测试函数之前执行,但具有@BeforeClass
的函数将在该类中的所有测试函数之前仅执行一次。类似地,带有
@After
注解的函数将在带有@Test
注解的类中的每个测试函数之后执行,但是带有@AfterClass
的函数将在该类中的所有测试函数之后仅执行一次。示例类
样品测试
输出
在Junit 5中
ujv3wf0j4#
JUnit @每个之前、@每个之后、@所有之前、@所有之后
@Before
(JUnit 4)-〉@BeforeEach
(JUnit 5)-每次测试之前调用方法@After
(JUnit 4)-〉@AfterEach
(JUnit 5)-每次测试后调用方法@BeforeClass
(JUnit 4)-〉@BeforeAll
(JUnit 5)-static方法在执行该类中的所有测试之前被调用。它可能是一个大型任务,如启动服务器、读取文件、建立数据库连接...@AfterClass
(JUnit 4)-〉@AfterAll
(JUnit 5)-静态方法在执行该类中的所有测试后被调用。kx1ctssn5#
与相同
qcuzuvrc6#
所有这些注解之间的基本区别如下-
1.@BeforeEach-用于在执行每个测试方法之前(例如设置)运行公共代码。类似于JUnit 4的@Before。
1.@AfterEach-用于在每个测试方法执行之后(例如,tearDown)运行公共代码。类似于JUnit 4的@After。
1.@BeforeAll-用于在执行任何测试之前对每个类运行一次。类似于JUnit 4的@BeforeClass。
1.@AfterAll-用于在执行所有测试后对每个类运行一次。类似于JUnit 4@AfterClass。
所有这些注解沿着用法都在Codingeek - Junit5 Test Lifecycle上定义
uqzxnwby7#
@BeforeClass
将在整个测试套件之前运行,而@Before
将在每个测试之前运行,而@BeforeClass
在整个测试夹具之前运行一次。如果您的测试类有十个测试,@Before
代码将执行十次,但@BeforeClass
将只执行一次。