当前位置:   article > 正文

JUnit5单元测试框架的使用教程与简单实例_junit5使用

junit5使用

1、JUnit5的使用教程

1.1 简介

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

JUnit5旨在调整java8样式的编码,并且比JUnit4更强大和灵活。

什么是Junit5

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

这看上去比Junit4 复杂,实际上在导入包时也会复杂一些。

JUnit Platform:是在JVM上启动测试框架的基础。

JUnit Jupiter:是JUnit5扩展的新的编程模型和扩展模型,用来编写测试用例。Jupiter子项目为在平台上运行Jupiter的测试提供了一个TestEngine (测试引擎)。

JUnit Vintage:提供了一个在平台上运行JUnit 3和JUnit 4的TestEngine 。

1.2 安装

这里使用Maven进行安装,pom.xml配置文件如下:

  1. <dependencies>
  2. <!-- JUnit5单元测试框架 -->
  3. <dependency>
  4. <groupId>org.junit.platform</groupId>
  5. <artifactId>junit-platform-launcher</artifactId>
  6. <scope>test</scope>
  7. </dependency>
  8. <dependency>
  9. <groupId>org.junit.jupiter</groupId>
  10. <artifactId>junit-jupiter-engine</artifactId>
  11. <scope>test</scope>
  12. </dependency>
  13. <dependency>
  14. <groupId>org.junit.vintage</groupId>
  15. <artifactId>junit-vintage-engine</artifactId>
  16. <scope>test</scope>
  17. </dependency>
  18. </dependencies>

1.3 JUnit5注解

所有支持的注解都在包 org.junit.jupiter.api 下;

使用@Test、@TestTemplate、@RepeatedTest、@BeforeAll、@AfterAll、@BeforeEach或@AfterEach注释的方法不能返回值。

注解说明
@Test表示方法是测试方法。与JUnit 4的@Test注释不同,这个注释不声明任何属性,因为JUnit Jupiter中的测试扩展基于它们自己的专用注释进行操作。 
@ParameterizedTest表示方法是参数化测试。
@RepeatedTest表示方法是重复测试的测试模板。
@TestFactory表示方法是动态测试的测试工厂。
@TestInstance用于为带注释的测试类配置测试实例生命周期。
@TestTemplate表示方法是为测试用例设计的模板,根据注册提供程序返回的调用上下文的数量进行多次调用。
@DisplayName声明测试类或测试方法的自定义显示名称。
@BeforeEach表示在当前类中每个@Test、@RepeatedTest、@ParameterizedTest或@TestFactory方法之前执行注释的方法;类似于JUnit 4的@Before。
@AfterEach表示在当前类中的每个@Test、@RepeatedTest、@ParameterizedTest或@TestFactory方法之后,都应该执行带注释的方法;类似于JUnit 4的@After。
@BeforeAll表示应在当前类中的所有@Test、@RepeatedTest、@ParameterizedTest和@TestFactory方法之前执行带注释的方法;类似于JUnit 4的@BeforeClass。
@AfterAll表示在当前类中,所有@Test、@RepeatedTest、@ParameterizedTest和@TestFactory方法都应该执行注释的方法;类似于JUnit 4的@AfterClass。
@Nested表示带注释的类是一个嵌套的、非静态的测试类。@BeforeAll和@AfterAll方法不能直接在 @Nested 测试类中使用,除非使用“每个类”测试实例生命周期。
@Tag用于在类或方法级别声明过滤测试的标记;类似于TestNG中的测试组或JUnit 4中的类别。
@Disabled用于禁用测试类或测试方法;类似于JUnit 4的@Ignore。
@ExtendWith用于注册自定义扩展。

1.4 JUnit5与JUnit4注释的比较

两个版本中的大多数注释都是相同的,但很少有区别。这是一个快速比较。

特征JUNIT4JUNIT5
声明一种测试方法。@Test@Test
在当前类中的所有测试方法之前执行。@BeforeClass@BeforeAll
在当前类中的所有测试方法之后执行。@AfterClass@AfterAll
在每个测试方法之前执行。@Before@BeforeEach
每种测试方法后执行。@After@AfterEach
禁用测试方法/类。@Ignore@Disabled
测试工厂进行动态测试。NA@TestFactory
嵌套测试。NA@Nested
标记和过滤。@Category@Tag
注册自定义扩展。NA@ExtendWith

1.5 JUnit5断言(Assertions类)

JUnit Jupiter附带了许多JUnit 4拥有的断言方法,并添加了一些可以很好地用于Java 8 lambdas的断言方法。 
所有JUnit5断言都是 org.junit.jupiter.api.Assertions 中的静态方法断言类。

Asser类中主要方法如下:

方法名称方法描述
assertEquals断言传入的预期值与实际值是相等的。
assertNotEquals断言传入的预期值与实际值是不相等的。
assertArayEquals断言传入的预期数组与实际数组是相等的。
assertNull断言传入的对象是为空。
assertNotNull断言传入的对象是不为空。
assertTrue断言条件为真。
assertFalse断言条件为假。
assertSame断言两个对象引用同一个对象,相当于"==”。
assertNotSame断言两个对象引用不同的对象,相当于"!=”。
assertThat断言实际值是否满足指定的条件。

注意:上面的每一 个方法, 都有对应的重载方法,可以在前面加一个String类型的参数,表示如果断言失败时的提示。

推荐教程:

推荐JUnit5使用教程:《JUnit5入门系列教程》(作者:叶止水)。

2、JUnit5的简单实例

【实例】在IDEA开发工具中,中使用JUnit5实现一个简单的测试实例。

IDEA开发工具默认已经安装好了JUnit插件,如下图:

如果没有安装JUnit插件,请执行安装。

(1)编写pom.xml配置文件,引入JUnit5所需的jar包。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.pjb.mvnbook</groupId>
  7. <artifactId>hello-world</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <dependencies>
  10. <!-- JUnit5单元测试框架 -->
  11. <dependency>
  12. <groupId>org.junit.platform</groupId>
  13. <artifactId>junit-platform-launcher</artifactId>
  14. <scope>test</scope>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.junit.jupiter</groupId>
  18. <artifactId>junit-jupiter-engine</artifactId>
  19. <scope>test</scope>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.junit.vintage</groupId>
  23. <artifactId>junit-vintage-engine</artifactId>
  24. <scope>test</scope>
  25. </dependency>
  26. </dependencies>
  27. </project>

(2)创建HelloWorld.java类,该类是被测试的对象。

  1. /**
  2. * 业务类
  3. * @author pan_junbiao
  4. **/
  5. public class HelloWorld
  6. {
  7. public String sayHello()
  8. {
  9. return "您好,欢迎访问 pan_junbiao的博客";
  10. }
  11. public static void main(String[] args)
  12. {
  13. System.out.println(new HelloWorld().sayHello());
  14. }
  15. }

(3)创建测试类。

创建测试类的方法一:

选择需要被测试的类,点击鼠标右键(弹出菜单)→ Go To → Test。

创建测试类的方法二:

选择需要被测试的类,使用快捷键: Ctrl + Shift + T

在弹出的Create Test窗口中,输入相关测试类信息,并勾选需要被测试的方法。

编写测试代码:

  1. import org.junit.jupiter.api.Test;
  2. import org.junit.jupiter.api.AfterEach;
  3. import org.junit.jupiter.api.BeforeEach;
  4. /**
  5. * 使用JUnit5进行测试类
  6. * @author pan_junbiao
  7. **/
  8. class HelloWorldTest
  9. {
  10. @BeforeEach
  11. void setUp()
  12. {
  13. System.out.println("@BeforeEach,测试开始");
  14. }
  15. @AfterEach
  16. void tearDown()
  17. {
  18. System.out.println("@AfterEach,测试结束");
  19. }
  20. @Test
  21. void sayHello()
  22. {
  23. HelloWorld helloWorld = new HelloWorld();
  24. String result = helloWorld.sayHello();
  25. System.out.println(result);
  26. assertEquals("您好,欢迎访问 pan_junbiao的博客",result);
  27. }
  28. }

执行结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/712304
推荐阅读
相关标签
  

闽ICP备14008679号