Java测试框架-junit5

java当前主流的测试框架有两个:TESTNG、Junit5;这两个框架在功能上都比较完善,也没有说哪个更好,因为笔者平时用的比较多的是Junit5,所以本文主要讲的是Junit5的使用

1、Junit5的构成

Junit5的框架主要有三个部分组成分别是:JUnit Platform + JUnit Jupiter + JUnit Vintage3

  1. JUnit Platform :
    其主要作用是在 JVM 上启动测试框架。它定义了一个抽象的 TestEngine API 来定义运行在平台上的测试框架;也就是说其他的自动化测试引擎或开发人员⾃⼰定制的引擎都可以接入 Junit 实现对接和执行。同时还支持通过命令行、Gradle 和 Maven 来运行平台(这对于我们做自动化测试至关重要)

  2. JUnit Jupiter:
    这是 Junit5 的核心,可以看作是承载 Junit4 原有功能的演进,包含了 JUnit 5 最新的编程模型和扩展机制;很多丰富的新特性使 JUnit ⾃动化测试更加方便、功能更加丰富和强大。也是测试需要重点学习的地方;Jupiter 本身也是⼀一个基于 Junit Platform 的引擎实现,对 JUnit 5 而言,JUnit Jupiter API 只是另一个 API!。

  3. JUnit Vintage3
    Junit 发展了10数年,Junit 3 和 Junit 4 都积累了大量的⽤用户,作为新一代框 架,这个模块是对 JUnit3,JUnit4 版本兼容的测试引擎,使旧版本 junit 的⾃动化测试脚本也可以顺畅运行在 Junit5 下,它也可以看作是基于 Junit Platform 实现的引擎范例。

junit5依赖:

      <!--junit5--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.8.2</version></dependency><dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-runner</artifactId><version>1.8.2</version></dependency><dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-launcher</artifactId><version>1.8.2</version><scope>test</scope></dependency><dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-console-standalone</artifactId><version>1.8.2</version><scope>test</scope></dependency>

2、Junit5的常用注解


注解的使用实例

// @BeforeAll : 在测试类执行之前执行的方法 必须用static 相当与testng中的@BeforeClass@BeforeAllpublic static void beforeAll(){System.out.println("beforeAll");}// @BeforeEach : 在每个测试用例前执行的方法 相当于testng的@BeforeMethod@BeforeEachpublic void beforeEach(){System.out.println("beforeEach");}// @Disabled 相当但junit4的Ignore 跳过该测试用例@Test@Disabledvoid test01(){System.out.println("test01");}// @RepeatedTest 重复执行@RepeatedTest(4)@Tag("tagDemo")void test02(){    System.out.println("test02");}// @DisplayName("name") 展示用例名@Test@Tag("tagDemo2")@DisplayName("测试用例3")void test03(){System.out.println("test03");}// @AfterEach : 在测试类执行之后执行的方法@AfterEachpublic void afterEach(){System.out.println("afterEach");}// @AfterAll : 在每个测试用例后执行的方法 必须用static声明@AfterAllpublic static void afterAll(){System.out.println("afterAll");}// @Order定义执行顺序//  需要先在类上打上@TestMethodOrder(MethodOrderer.OrderAnnotation.class)注解@Test@Order(1)public void divideTest(){int divideResult = Calculator.divide(8, 2);   assertEquals(4,divideResult);}

3、测试套件的常用注解


有些测试用例可能每次都要执行,但是可能有些只有特定版本才需要运行,这个时候测试套件就可以帮助我们很好地将测试用例管理起来,指定需要运行的测试套件。
套件注解实例:

// 1 @RunWith+@SelectPackages+@IncludePackages+@ExcludePackages// @SelectPackages 选择需要执行的测试包// @IncludePackages 只执行选中的测试包  需要与@SelectPackages配合使用// @ExcludePackages过滤掉所选择的测试包@RunWith(JUnitPlatform.class)@SelectPackages({  "com.junit5.test2", "com.junit5.test"})@IncludePackages({        "com.junit5.test2"})@ExcludePackages({        "com.junit5.test2"})public class SuiteTest {}// 2 @RunWith+@SelectClasses// @SelectClasses选中需要执行的测试类@RunWith(JUnitPlatform.class)@SelectClasses({ LoginTest.class, Junit5Test.class})public class SuiteTest02 {}// 3  @RunWith+@SelectPackages+@IncludeClassNamePatterns+@ExcludeClassNamePatterns// @SelectPackages 选中需要执行的测试包// @IncludeClassNamePatterns 只执行测试包中对应的测试类 与@SelectPackages配合使用// @ExcludeClassNamePatterns 过滤掉测试包中的测试类@RunWith(JUnitPlatform.class)@SelectPackages({ "com.junit5.test2", "com.junit5.test"})@IncludeClassNamePatterns({ "com.junit5.test.Junit5Test",        "com.junit5.test2.LoginTest"})@ExcludeClassNamePatterns({  "com.junit5.test.Junit5Test"})public class SuiteTest03 {}// 4 @RunWith+@SelectPackages+@IncludeTags+@ExcludeTags// @SelectPackages选中需要执行的测试包// @IncludeTags 执行包含标签的用例 ,标签打在测试用例前// @ExcludeTags 过滤掉包含标签的用例@RunWith(JUnitPlatform.class)@SelectPackages({ "com.junit5.test2", "com.junit5.test"})@IncludeTags({ "tagDemo"})@ExcludeTags({ "tagDemo2"})public class SuiteTest04 {}

4、Junit5 的断言方式:

  • 上面试Junit5自带的断言方式,如果需要更复杂的断言可以使用hamcrest断言方式;
  • 软断言:如果一个用例需要进行多次断言,就需要用到assertAll(需要先设置java8语法),使用软断言后不会因为一个断言的失败报错而中断测试
  • 软断言实例:
@Test
void addTest(){  assertAll(()->assertEquals(9==9),           ()->assertEquals(7==2),           ()->assertEquals(10==10)    );}
// 二:现将assert可执行语句进行储存,再用assertAll进行断言
ArrayList<Executable> assertList = new ArrayList<>();
for(int i = 0;i<3;i++){int result = 1 + i;assertList.add({// 先将断言语句存起来() -> assertEquals(3,result);})
}
assertAll(assertList.Stream());

5、Junit5并发测试

junit5 从5.3开始支持多线程并发测试,
需要在配置文件junit-platform.properties配置相关信息
配合@RepeatedTest注解使用
junit-platform.properties配置:

 #是否允许并行执行true/falsejunit.jupiter.execution.parallel.enabled=true#是否支持方法级别多线程same_thread/concurrentjunit.jupiter.execution.parallel.mode.default=concurrent#是否支持类级别多线程same_thread/concurrentjunit.jupiter.execution.parallel.mode.classes.default=concurrent# the maximum pool size can be configured using a ParallelExecutionConfigurationStrategyjunit.jupiter.execution.parallel.config.strategy=fixedjunit.jupiter.execution.parallel.config.fixed.parallelism=2

6、参数化方式

注解 说明
@valueSource 通过注解可以直接指定携带的运行参数
@EnumSource 枚举参数元,允许我们通过将参数值有给定的Enum枚举类型传入
@MethodSource 通过其他的Java方法函数来作为参数源
@ArgumentSource 参数类参数源,应用类必须实现ArgumentsProvide接口
@CSVSource csv格式作为参数源
@CSVFileSource csv文件作为参数源

以上是Junit5的参数化方式,在这里我就不一一介绍了,本人用的更多的MethodSource+yaml的参数化方式;因为yaml文档能够比较清晰地定义各种类型的参数,结合MethodSource注解就能够很方便的构建出不同类型的参数
简单的MethodSource实例:

    // 添加成员@ParameterizedTest@MethodSource("testData")public void successTest(String name,String phone)  {System.out.println("name: " + name +"phone: " + phone)}// 返回用例数据public static Stream<Arguments> testData() {return Stream.of(Arguments.arguments("周杰伦","12121221211"),Arguments.arguments("林俊杰","12121221212"),Arguments.arguments("王力宏","12121221213"));}

以上就是笔者本次分享的内容

Java测试框架-junit5详解相关推荐

  1. java定时任务框架elasticjob详解

    这篇文章主要介绍了java定时任务框架elasticjob详解,Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架.该项目基于成熟的开源产品Quartz和Zo ...

  2. Android UI 测试框架Espresso详解

    Android UI 测试框架Espresso详解 1. Espresso测试框架 2.提供Intents Espresso 2.1.安装 2.2.为Espresso配置Gradle构建文件 2.3. ...

  3. Spring基于注解TestContext 测试框架使用详解

    原创整理不易,转载请注明出处:Spring基于注解TestContext 测试框架使用详解 代码下载地址:http://www.zuidaima.com/share/1775574182939648. ...

  4. Java Spring框架入门详解教程【多测师_何sir】

    Spring框架入门详解教程 spring概述 spring结构 spring IOC spring DI spring概述 Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多 ...

  5. gtest测试框架使用详解_测试框架TestNG使用介绍

    近期接触到了一个比较全面的基于Java的接口自动化测试框架,作为一名Java小白,所以打算研究一下,顺带学习学习Java,该测试框架的逻辑控制层使用的HttpClient + TestNG. 在本期中 ...

  6. java 测试磁盘io,详解三种Linux测试磁盘IO性能的方法总结,值得收藏

    概述 在磁盘测试中我们一般最关心的几个指标分别为:iops(每秒执行的IO次数).bw(带宽,每秒的吞吐量).lat(每次IO操作的延迟). 当每次IO操作的block较小时,如512bytes/4k ...

  7. Java安全框架---JWT详解

    JWT详解 一. JWT介绍 1. JWT官网解释 2. JWT作用 3. 传统的Session认证 1. 认证方式 2. 认证流程 3. 暴露问题 4. JWT认证 1. 认证流程 2. JWT优点 ...

  8. gtest测试框架使用详解_【python】新手小白必看,教你如何使用全功能Python测试框架 - python秋枫...

    大家好,我是在升职加薪道路上越奋斗头发越少的阿茅. 今天来跟想入门还徘徊在门外的小白们聊一聊 1.安装和简单使用 2.配置文件 3.断言 一. 第1步 (安装和简单使用) pytest是一个非常成熟的 ...

  9. 硅谷最爱的测试框架:详解PyTest

    Python中有许多测试框架,但其中最受欢迎的就是PyTest.PyTest是一个强大而灵活的测试框架,它提供了许多先进的功能,可以让你的测试更加简洁.易读. 一.PyTest 简介 PyTest是一 ...

  10. gtest测试框架使用详解_python selenium自动化测试框架如何搭建使用?

    selenium是一个web自动化测试工具,本身向python提供编程接口,至于搭建使用的话,只需要安装一下selenium模块,并配置一下浏览器驱动就行,下面我简单介绍一下实现过程,感兴趣的朋友可以 ...

最新文章

  1. 【转】android错误 aapt.exe已停止工作的解决方法
  2. 如何评价LoRa这项应用于低功率长距离场景的物联网传输技术?
  3. R语言图形用户界面数据挖掘包Rattle:加载UCI糖尿病数据集、并启动Rattle图形用户界面、数据集变量重命名,为数据集结果变量添加标签、数据划分(训练集、测试集、验证集)、随机数设置
  4. Java学习笔记(十)--控制台输入输出
  5. nyoj-括号匹配(二)---动态规划
  6. linux中怎么安装ded包_快速提示:如何在Linux中安装.deb和.tar文件 - push博客
  7. SAP生产订单管理与分析实例
  8. java thread 内存泄露_记一次ThreadLocal引发的内存泄露
  9. 中国行政区域划分图 华北,东北,华东,中南,西南,西北
  10. 华为手机USB调试搜不到设备
  11. 《MySQL入门学习》(p61~p62)
  12. Spring Boot实训开发个人博客4
  13. linux的htb队列,Linux内核TC工具链路带宽设计--HTB队列规定及简单的过滤器介绍
  14. 计算机网络基础之数据链路层的功能与服务
  15. 搭建个人网站没有公网IP地址可以吗?
  16. 带您了解如何做好新媒体营销推广
  17. 你真的会用K折交叉吗?对于K折交叉的思考 | K折交叉的坑
  18. 程序员翻车时的 30 种常见反应!
  19. python清空字典保留变量方法,python关于字典的常用方法
  20. IE打不开二级页面的解决方法

热门文章

  1. Vue打开动态html页面,vue.js中怎么打开新页面?
  2. 详解PWM原理、频率与占空比
  3. 波利亚-怎样解题的思考
  4. macOS HBuilderX 使用安卓模拟器调试项目
  5. 如何将JavaScript中的JSON字符串转换为JSON对象数组?
  6. U1C3 介绍SketchEngine和Web语料库研究
  7. 计算机主板 华硕 游戏用,DIY电脑的基石,华硕TUF B360M-PLUS GAMING S游戏主板
  8. HP Proliant DL360 G9使用业务网卡登录ILO管理
  9. java 控制层和业务层,控制层、业务层和数据访问层
  10. frm考试可以用计算机,FRM考试,能用哪些金融计算器?(内含用法功能全解读)...