在JUnit 5中,
与断言一样,Assumptions方法也从JUnit 4和JUnit 5的不同包中导入。在 JUnit 4中,它们从org.junit.Assume导入,在JUnit 5中它们从 org.junit.jupi-ter.api.Assumptions导入
以下是 JUnit 5 中更改的一些注释:
JUnit 4中的@Rule和@ClassRule注释被删除。相反,应该使用@ExtendWith和@RegisterExtension。
现在我们了解了JUnit 4和JUnit 5注释,让我们在JUnit 5教程的这一部分中更详细地查看注释:在JUnit 4中,我们使用了可以接受参数的@Test 注解。但是在JUnit 5中,@Test 注释不接受任何参数。
JUnit 4中@Test注释的使用
JUnit 5中@Test注释的使用
四、JUnit 4和JUnit 5中的注解
在JUnit 5教程的这一部分中,我们将了解JUnit 4和JUnit 5中使用的主要JUnit批注。JUnit 5中的大多数批注与JUnit 4中的批注类似。
1.@Test–用于声明测试;
2.@TestFactory–用于定义方法;
3.@RepeatedTest–用于指定该方法重复特定次数;例如,下面的测试方法使用@RepeatedTest进行注释,该方法将自动重复5次;
4.@ParameterizedTest–指示该方法是参数化测试;这些参数化测试类似于普通的测试方法,但我们必须指定一个源来为每个调用提供参数,而这些参数又会在测试中使用;
5.@TestMethodOrder–用于定义测试执行顺序;
6.@DisplayName–用于为方法或类指定自定义显示名称;
7.@Tag–用于通过定义标签在方法或类级别过滤测试;
8.@Disabled–用于禁用测试方法或类;
9.@BeforeEach–用于指定特定测试方法必须在每个@Test、@RepeatedTest、@ParameterizedTest或@TestFactory方法之前执行;
10.@AfterEach–用于指定特定测试方法必须在每个@Test、@RepeatedTest.@ParameterizedTest或@TestFactory方法之后执行;
11.@BeforeAll–用于指定特定测试方法必须在所有@Test、@RepeatedTest、@ParameterizedTest或@TestFactory方法之前执行;
12.@AfterAll–用于指定特定测试方法必须在所有@Test、@RepeatedTest、@ParameterizedTest或@TestFactory方法之后;
五、JUnit 5中注解的顺序执行流程
让我们看看这些注解在JUnit 5中的执行顺序。
第一步: @BeforeAll注解下实现的方法执行一次;
第二步: @BeforeEach注解下实现的方法在第一次测试之前执行;
第三步: 执行@Test注解下实现的方法;
第四步: @AfterEach注解下实现的方法在测试用例执行后运行;
第五步: @AfterAll注解下实现的方法会在最后执行。
在使用JUnit的Selenium自动化测试中,你可能希望在同一类(或不同类)下实现多个测试场景。正如JUnit 5教程的前面部分所见,了解在不同注解下实现方法的执行顺序非常重要。
如果类中有两个或多个测试方法,则执行顺序如下:
第一步: @BeforeAll注解下实现的方法执行一次。
第二步: @BeforeEach注解下实现的方法在第一次测试之前执行。
第三步:执行@Test注解下实现的方法。
第四步: @AfterEach注解下实现的方法在测试用例执行后运行。
第五步: @BeforeEach注解下实现的方法在第二个测试用例之前执行。
第六步:执行@Test注解下实现的方法。
第七步: @AfterEach注解下实现的方法在第二个测试用例执行后执行。
第八步:在最后执行一次@AfterAll注解的方法。
因此,对于多个测试用例,@BeforeAll和@AfterAll注释下实现的方法只在测试开始和结束时执行一次。另一方面,@BeforeEach和@AfterEach注释下实现的测试方法在之前执行和之后分别用于每个测试用例。
到目前为止,在本JUnit 5教程中,我们已经涵盖JUnit 5框架的基础知识、JUnit 5的注释以及注释的生命周期。
六、如何从JUnit 4迁移到JUnit 5?
以下是执行迁移的步骤:
1. JUnit 5中的JUnit Vintage引擎有助于使用JUnit平台运行用JUnit 4(或JUnit 3)编写的现有测试用例;
2. 现有JUnit 4测试中的@Before和@After等注释必须替换为JUnit 5中的等效注释(即分别为@BeforeEach 和@AfterEach);
3. 断言(即org.junit.jupiter.Assertions)和假设(即 org.junit.jupiter.api.Assumpt-ions)导入正确的包;
4. 删除JUnit 5中不再支持的JUnit 4批注,并将这些批注替换为JUnit 5中支持的批注;
5. 如果你的JUnit 4项目定义了某些规则,则必须逐步完成迁移。JUnit 4的一些规则与JUnit Jupiter兼容;
6. junit-jupiter-migration支持模块为JUnit 4中的@Ignore注释提供支持,它相当于Jupiter的@Disabled注释,然而,这仍处于试验阶段。
七、使用JUnit 5进行单元测试的优势
到目前为止,在本JUnit 5教程中,我们已经涵盖了JUnit 4和Junit 5的所有基本方面,包括正面的JUnit 5与JUnit 4比较。现在你已经了解了JUnit 5中的注释,让我们看看使用JUnit 5进行单元测试的优势。下面提到了一些主要的优点:
1. 与以前的版本相比,它提供了独特的功能来定义测试;
2. 它有助于在断言和假设的测试中利用lambda函数;
3. 它提供了具有明确目的的突出注释,可用于增强单元测试;
4. 它具有独特的可扩展架构;
5. 它支持迁移以前的JUnit版本编写的现有测试。
在本JUnit 5教程中,我们研究了JUnit 5组件及其特性、新引入的注释以及将测试从JUnit 4迁移到Junit 5的方法。如果你是现有JUnit用户,则可以将本JUnit 5教程用作将测试迁移到JUnit 5以及开始使用JUnit框架的便捷指南。
参考文章:https://www.lambdatest.com/blog/execute-junit4-tests-with-junit5/
文章标签: 测试框架