当前位置:   article > 正文

JUnit5-单元测试操作详解_junit5 单测

junit5 单测

1、JUnit5-单元测试框架

JUnit 5是JUnit测试框架的下一个主要版本,用于编写和运行单元测试。

与以前版本的 JUnit 不同,JUnit 5 由来自三个不同子项目的多个不同模块组成。

JUnit 5 = JUnit 平台JUnit Jupiter + JUnit Vintage

JUnit平台是在 JVM 上启动测试框架的基础。它还定义了TestEngine用于开发在平台上运行的测试框架的API。此外,该平台还提供了一个 控制台启动器,用于从命令行启动平台,还提供JUnit 平台套件引擎,用于使用平台上的一个或多个测试引擎来运行自定义测试套件。对 JUnit 平台的一流支持也存在于流行的 IDE(请参阅IntelliJ IDEA、 EclipseNetBeans和 Visual Studio Code)和构建工具(请参阅Gradle、 MavenAnt)中。

JUnit Jupiter是编程模型和 扩展模型的组合,用于在 JUnit 5 中编写测试和扩展。Jupiter 子项目提供了TestEngine在平台上运行基于 Jupiter 的测试的功能。

JUnit Vintage提供了一个TestEngine用于在平台上运行基于 JUnit 3 和 JUnit 4 的测试。它要求类路径或模块路径上存在 JUnit 4.12 或更高版本。

2、支持的 Java 版本

JUnit 5 在运行时需要 Java 8(或更高版本)。

3、寻求帮助

在Stack Overflow上询问 JUnit 5 相关问题或在Gitter上与社区聊天。

4、下载JUnit5依赖

(1)、进入springboot官网 复制依赖:Core Features

(2)、粘贴到pom.xml文件中,点击maven刷新按钮,刷新成功后就新增成功了

5、JUnit Jupiter 支持以下注释来配置测试和扩展框架。

除非另有说明,所有核心注解均位于模块org.junit.jupiter.api中的包中junit-jupiter-api

注解描述

@Test

表示方法是测试方法。与 JUnit 4 的@Test注释不同,此注释不声明任何属性,因为 JUnit Jupiter 中的测试扩展基于其自己的专用注释进行操作。此类方法将被继承,除非它们被重写

@ParameterizedTest

表示方法是参数化测试。此类方法将被继承,除非它们被重写

@RepeatedTest

表示方法是重复测试的测试模板。此类方法将被继承,除非它们被重写

@TestFactory

表示方法是动态测试的测试工厂。此类方法将被继承,除非它们被重写

@TestTemplate

表示方法是测试用例的模板,设计为根据注册提供者返回的调用上下文的数量多次调用。此类方法将被继承,除非它们被重写

@TestClassOrder

用于配置带注释的测试类中测试类的测试类执行顺序@Nested。此类注释是继承的

@TestMethodOrder

用于配置被注解的测试类的测试方法执行顺序;类似于 JUnit 4 的@FixMethodOrder. 此类注释是继承的

@TestInstance

用于配置带注释的测试类的测试实例生命周期。此类注释是继承的

@DisplayName

声明测试类或测试方法的自定义显示名称。此类注释不会被继承

@DisplayNameGeneration

为测试类声明一个自定义显示名称生成器。此类注释是继承的

@BeforeEach

表示被注解的方法应该在当前类中的每个, , , 或方法之前执行; 类似于 JUnit 4 的. 此类方法是继承的,除非它们被覆盖取代(即仅基于签名进行替换,而不考虑 Java 的可见性规则)。 @Test@RepeatedTest@ParameterizedTest@TestFactory@Before

@AfterEach

表示被注解的方法应该在当前类中的每个、、、 或方法之后执行; 类似于 JUnit 4 的. 此类方法是继承的,除非它们被覆盖取代(即仅基于签名进行替换,而不考虑 Java 的可见性规则)。 @Test@RepeatedTest@ParameterizedTest@TestFactory@After

@BeforeAll

表示被注解的方法应该在当前类中的所有、、、方法之前执行; 类似于 JUnit 4 的. 此类方法是继承的,除非它们被隐藏重写取代(即,仅根据签名进行替换,而不考虑 Java 的可见性规则),而且必须如此,除非使用“每类”测试实例生命周期。 @Test@RepeatedTest@ParameterizedTest@TestFactory@BeforeClassstatic

@AfterAll

表示被注解的方法应该在当前类中的所有、、、方法之后执行; 类似于 JUnit 4 的. 此类方法是继承的,除非它们被隐藏重写取代(即,仅根据签名进行替换,而不考虑 Java 的可见性规则),而且必须如此,除非使用“每类”测试实例生命周期。 @Test@RepeatedTest@ParameterizedTest@TestFactory@AfterClassstatic

@Nested

表示被注解的类是一个非静态嵌套测试类。在 Java 8 到 Java 15 上,@BeforeAll除非使用“每类”测试实例生命周期@AfterAll,否则不能直接在测试类中使用方法。从 Java 16 开始,可以使用任一测试实例生命周期模式在测试类中声明方法。此类注释不会被继承@Nested@BeforeAll@AfterAllstatic@Nested

@Tag

用于在类或方法级别声明用于过滤测试的标签;类似于 TestNG 中的测试组或 JUnit 4 中的类别。此类注释在类级别继承,但不在方法级别继承。

@Disabled

用于禁用测试类或测试方法;类似于 JUnit 4 的@Ignore. 此类注释不会被继承

@Timeout

用于在测试、测试工厂、测试模板或生命周期方法的执行超过给定持续时间时失败。此类注释是继承的

@ExtendWith

用于以声明方式注册扩展。此类注释是继承的

@RegisterExtension

用于通过字段以编程方式注册扩展。这些字段是继承的,除非它们被遮蔽

@TempDir

用于在生命周期方法或测试方法中通过字段注入或参数注入提供临时目录;位于org.junit.jupiter.api.io包装内。

6、首个示例用法如下

判断括号里 2个值是否相等

  1. package com.example.demo;
  2. import static org.junit.jupiter.api.Assertions.assertEquals;
  3. import org.junit.jupiter.api.Test;
  4. import org.springframework.boot.test.context.SpringBootTest;
  5. @SpringBootTest
  6. class Demo5ApplicationTests {
  7. private Integer number=1+1;
  8. @Test
  9. void addition() {
  10. assertEquals(2,number);
  11. }
  12. }

断言失败展示

7、显示名称

  1. package com.example.demo;
  2. import org.junit.jupiter.api.DisplayName;
  3. import org.junit.jupiter.api.Test;
  4. @DisplayName("A special test case")
  5. @SpringBootTest
  6. class NameTests {
  7. @Test
  8. @DisplayName("Custom test name containing spaces")
  9. void testWithDisplayNameContainingSpaces() {
  10. System.out.println("1");
  11. }
  12. @Test
  13. @DisplayName("╯°□°)╯")
  14. void testWithDisplayNameContainingSpecialCharacters() {
  15. System.out.println("2");
  16. }
  17. @Test
  18. @DisplayName("
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/584876
    推荐阅读
    相关标签