单元测试(unittesting),是指对软件中的最小可测试单元进行检查和验证。 总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。 那单元测试框架该怎么搭呢?Junit5又能给我们带来怎样的惊喜呢?首先我们来看看什么是Junit5,再看看如何使用吧WhatisJunit5?Junit5简介 什么是Junit5,在Junit5的官方介绍文档中这写到:Junit5由JUnitPlatformJUnitJupiterJUnitVintage3部分构成 借用IBMDeveloper的一张图来说明JUnit5的架构: JUnitPlatform: 其主要作用是在JVM上启动测试框架。它定义了一个抽象的TestEngineAPI来定义运行在平台上的测试框架;也就是说其他的自动化测试引擎或开发人员定制的引擎都可以接入Junit实现对接和执。同时还支持通过命令行、Gradle和Maven来运行平台(这对于我们做自动化测试至关重要)JUnitJupiter: 这是Junit5的核心,可以看作是承载Junit4原有功能的演进,包含了JUnit5最新的编程模型和扩展机制;很多丰富的新特性使JUnit动化测试更加方、功能加丰富和强大。也是测试需要重点学习的地方;Jupiter本身也是一个基于JunitPlatform的引擎实现,对JUnit5而言,JUnitJupiterAPI只是另一个API!JUnitVintage: Junit发展了10数,Junit3和Junit4都积累大的用户,作为新一代框架,这个模块是对JUnit3,JUnit4版本兼容的测试引擎,使旧版本junit的动化测试脚本也可以顺畅运在Junit5下,它也可以看作是基于JunitPlatform实现的引擎范例。 JUnit5对Java运行环境的最低要求是Java8。Junit5的新特性特性与JUnit4注解比较 JUnit5的新特性有:嵌套单元测试、Lambda支持、参数化测试、重复测试、动态测试 JUnit4与JUnit5中的注解比较 Junit5 Junit4 说明 Test Test 被注解的方法是一个测试方法。与JUnit4相同。 BeforeAll BeforeClass 被注解的(静态)方法将在当前类中的所有Test方法前执行一次。 BeforeEach Before 被注解的方法将在当前类中的每个Test方法前执行。 AfterEach After 被注解的方法将在当前类中的每个Test方法后执行。 AfterAll AfterClass 被注解的(静态)方法将在当前类中的所有Test方法后执行一次。 Disabled Ignore 被注解的方法不会执行(将被跳过),但会报告为已执行。JUnit5常用注解Junit5常用注解展示 注解 说明 Test 表明一个测试方法 DisplayName 测试类或方法的显示名称 BeforeEach 表明在单个测试方法运行之前执行的方法 AfterEach 表明在单个测试方法运行之后执行的方法 BeforeAll 表明在所有测试方法运行之前执行的方法 AfterAll 表明在所有测试方法运行之后执行的方法 Disabled 禁用测试类或方法 Tag 为测试类或方法添加标签 RepeatedTest 额外重复执行 Nested 嵌套测试实操演示 1)创建maven工程XUnit,pom。xml中添加Junit5的依赖dependencygroupIdorg。junit。jupitergroupIdjunitjupiterengineartifactIdversion5。5。2versiondependencydependencygroupIdorg。junit。platformgroupIdjunitplatformrunnerartifactIdversion1。5。1versiondependency复制代码 2)其余的XUnit框架通用的设计运行规则可参考博客:如何利用xUnit框架对测试用例进行维护xUnit简介及基本使用方法(基于Junit4) 3)添加用例Test,再在用例执行前后添加BeforeEach、AfterEach: 运行结果: 4)在测试类执行前后添加BeforeAll和AfterAll 测试结果: 5)在测试用例test1上加入注解Disabled,使test1失 测试结果: 从测试结果中我们可以看到test1用例被ignore,没有被执行 6)分别将test1和test2用DisplayName加上用例展示名称 测试结果: 7)对测试用例2加上注解RepeatedTest,使其额外重复执行3次 测试结果: 从测试结果中我们可以看到测试用例2被额外重复执行了3次 8)对于Nested嵌套执行举例如下: 测试结果: 由测试结果可以看出,Nested的执行顺序为先执行Nested嵌套外层的用例,再以倒叙形式执行Nested用例,然后再执行第二层嵌套的用例: 外层倒叙嵌套第二层嵌套 Junit5套件执行套件介绍 注解 作用 RunWith(JUnitPlatform。class) 执行套件 SelectPackage({com。packageA,com。packageB}) 创建测试套件 SelectClasses({a。class,b。class,c。class}) 创建测试套件 IncludePackage(包名) 过滤需要执行的测试包 ExcludePackages 过滤不需要执行的测试包 IncludeClassNamePatterns 过滤需要执行的测试类 ExcludeClassNamePatterns 过滤不需要执行的测试类 IncludeTags(production) 过滤需要执行的测试方法 ExcludeTags(PROD) 过滤不需要执行的测试方法 RunWith是从Junit4迁移过来的,RunWith连同它的参数JUnitPlatform。class(一个基于JUnit4且理解JUnitPlatform的Runner)让您可以在Eclipse内运行JUnitJupiter单元测试。Eclipse尚未原生支持JUnit5。未来,Eclipse将提供原生的JUnit5支持,那时我们不再需要此注解;Junit5官方给出了替代它的注解: RunWithSelectPackages有两个包testcasedemo,junit5demo,利用RunWithSelectPackages将包中测试类依次运行 套件类: 测试结果: RunWithSelectPackagesIncludePackage RunWithSelectPackagesIncludePackages配合使用过滤出需要执行的测试包testcasedemo。demo2 套件类: 测试结果: RunWithSelectPackagesExcludePackages RunWithSelectPackagesExcludePackages配合使用过滤出不需要执行的测试包testcasedemo。demo2 套件类: 测试结果: RunWithSelectPackagesIncludeClassNamePatterns 将junit5demo包下的TestJunit5demo和testcasedemo。demo2所有测试类过滤出来并执行 套件类: 测试结果 RunWithSelectPackagesIncludeTags在testcasedemo。demo2。TestDemo2的方法testDemo2上加上注解Tag: 过滤并执行方法testDemo2: 套件类: 测试结果: 参考文档 Junit5官网: https:junit。orgjunit5docscurrentuserguideoverview IBMDeveloper: https:www。ibm。comdeveloperworkscnjavajintroducingjunit5part1jupiterapiindex。html https:www。ibm。comdeveloperworkscnjavajjunit5index。html