使用 JUnit5 测试套件,您可以运行分散到多个测试类和不同包中的测试。 JUnit5 提供了两个注解:@SelectPackages和@SelectClasses以创建测试套件。 此外,您可以使用其他注解来过滤测试包,类甚至测试方法。

Table of ContentsProject Structure for Test classes and Suite
Create Test Suite with JUnit5 @SelectPackages
Create Test Suite with JUnit5 @SelectClasses
Filtering Packages with @IncludePackages and @ExcludePackages
Filtering Test Classes with @IncludeClassNamePatterns and @ExcludeClassNamePatterns
Filtering Tests with @IncludeTags and @ExcludeTags

测试类名称必须遵循正则表达式模式^.*Tests?$。 这意味着测试类名称必须以Test或Tests结尾。 例如UserMgmtTests,DeviceMgmtTest等。

1. 测试类和套件的项目结构

对于此示例,我使用以下项目结构。


JUnit5 测试套件项目结构

2. 使用@SelectPackages创建测试套件

@SelectPackages指定通过@RunWith(JUnitPlatform.class)运行测试套件时要选择的包的名称。

指定单个包

将packageName作为参数传递给@SelectPackages注解。

@RunWith(JUnitPlatform.class)
@SelectPackages("com.howtodoinjava.junit5.examples.packageA")
public class JUnit5TestSuiteExample
{}


@SelectPackages – 单个包示例

指定多个包

将参数中的程序包名称作为字符串数组(在大括号{}中)传递给@SelectPackages注解。

@RunWith(JUnitPlatform.class)
@SelectPackages({"com.howtodoinjava.junit5.examples.packageA","com.howtodoinjava.junit5.examples.packageB"})
public class JUnit5TestSuiteExample
{}

@SelectPackages – 多个包示例

请注意,如果我们在@SelectPackages注解中传递packageX,则将“此软件包及其所有子软件包中的测试类”用于测试套件。

3. 使用@SelectClasses创建测试套件

@SelectClasses指定通过@RunWith(JUnitPlatform.class)运行测试套件时要选择的类。

指定单个类

将ClassName.class作为参数传递到@SelectClasses注解。

@RunWith(JUnitPlatform.class)
@SelectClasses( ClassATest.class )
public class JUnit5TestSuiteExample
{}


@SelectClasses – 单个类示例

指定多个类

将参数中的类名称作为数组(在大括号{}中)传递给@SelectClasses注解。

@RunWith(JUnitPlatform.class)
@SelectClasses( { ClassATest.class, ClassBTest.class, ClassCTest.class } )
public class JUnit5TestSuiteExample
{}


@SelectClasses – 多个测试类示例

4. @IncludePackages和@ExcludePackages

我们了解到@SelectPackages也会导致其所有子包都被扫描以查找测试类。 如果要排除任何特定的子包,或包括任何包,则可以使用 @IncludePackages和@ExcludePackages注解。

@IncludePackages示例

@RunWith(JUnitPlatform.class)
@SelectPackages("com.howtodoinjava.junit5.examples")
@IncludePackages("com.howtodoinjava.junit5.examples.packageC")
public class JUnit5TestSuiteExample
{}

这只会添加com.howtodoinjava.junit5.examples.packageC中的测试类(即ClassCTest)中的测试。

@ExcludePackages示例

@RunWith(JUnitPlatform.class)
@SelectPackages("com.howtodoinjava.junit5.examples")
@ExcludePackages("com.howtodoinjava.junit5.examples.packageC")
public class JUnit5TestSuiteExample
{}

这将添加com.howtodoinjava.junit5.examples中测试类的测试,但不包括子包com.howtodoinjava.junit5.examples.packageC(即ClassATest和ClassBTest)中的所有测试类。

5. @IncludeClassNamePatterns和@ExcludeClassNamePatterns

很多时候,在选择注解中包含所有包或测试类名称是不可行的。 在这种情况下,您可能会提供更广泛的包范围,并通过 appy 筛选将哪些测试类包括在套件中或从套件中排除。

要指定要排除或包含的测试类名称模式,可以使用@IncludeClassNamePatterns和@ExcludeClassNamePatterns注解。

@IncludeClassNamePatterns示例

包括名称以ATest或ATests结尾的所有测试类。

@RunWith(JUnitPlatform.class)
@SelectPackages("com.howtodoinjava.junit5.examples")
@IncludeClassNamePatterns({"^.*ATests?$"})
public class JUnit5TestSuiteExample
{}

@ExcludeClassNamePatterns示例

排除名称以ATest或ATests结尾的所有测试类。

@RunWith(JUnitPlatform.class)
@SelectPackages("com.howtodoinjava.junit5.examples")
@ExcludeClassNamePatterns({"^.*ATests?$"})
public class JUnit5TestSuiteExample
{}

您可以在上述注解中应用多个模式。 在多种模式的情况下,它们使用“OR”语义进行组合。 这意味着,如果类别的完全限定名称与至少一种模式匹配,则该类别将包含在测试套件中/从测试套件中排除。

6. @IncludeTags和@ExcludeTags

在企业应用中,您可能已经标记了要在特定环境中运行的测试用例,例如开发或生产。 您还可以在测试套件中包含或排除基于这些标记的测试。

@IncludeTags示例

此测试套件将运行包com.howtodoinjava.junit5.examples(及其子包)中标记有production的所有测试。

@RunWith(JUnitPlatform.class)
@SelectPackages("com.howtodoinjava.junit5.examples")
@IncludeTags("production")
public class JUnit5TestSuiteExample
{}

@ExcludeTags示例

此测试套件将排除包com.howtodoinjava.junit5.examples(及其子包)中所有带有development标签的测试。

@RunWith(JUnitPlatform.class)
@SelectPackages("com.howtodoinjava.junit5.examples")
@ExcludeTags("development")
public class JUnit5TestSuiteExample
{}

显然,有多种方法在 JUnit5 中创建测试套件,并且它强烈支持过滤测试套件中的测试。

JUnit5 测试套件示例相关推荐

  1. 用置换破坏您的JUnit5测试

    编写JUnit测试可能是一个乏味而乏味的过程. 了解如何使用排列结合TestFactory方法和DynamicTest对象以最少的编码工作来改进测试类. 在本文中,我将使用Java流ORM Speed ...

  2. 使用 CNF 测试套件测试云原生最佳实践

    Joel Hans为CNCF撰写的社区帖子 电信行业是当今日益数字化的经济的支柱,但在发展以满足现代基础设施实践方面面临着艰巨的新挑战.电信是如何陷入这种境地的?由于事故或停机的风险非常严重,该行业几 ...

  3. OpenHarmony移植:XTS子系统之应用兼容性测试套件

    本文分享自华为云社区<移植案例与原理 - XTS子系统之应用兼容性测试套件>,作者:zhushy. XTS(X Test Suite)子系统是OpenHarmony生态认证测试套件的集合, ...

  4. 无线安全渗透测试套件WiFi-Pumpkin新版本发布

    无线安全渗透测试套件WiFi-Pumpkin新版本发布 WiFi-Pumpkin是一款无线安全检测工具,利用该工具可以伪造接入点完成中间人攻击,同时也支持一些其它的无线渗透功能.旨在提供更安全的无线网 ...

  5. NIST数字测试套件使用说明

    NIST 测试套件是由15个测试组成的统计软件包,这些是为了测试随机(任意长度)由基于硬件或软件的密码随机或伪随机数生成器产生的二进制序列.测试关注于各种不同类型的已存在的非随机序列.有些测试可以分成 ...

  6. 安卓CTS官方文档之兼容性测试套件简介

    官方英文文档原文:https://source.android.com/compatibility/cts-intro.html Compatibility Test Suite 兼容性测试套件 Ho ...

  7. glibc 知:测试套件

    文章目录 前言 测试套件目标 只测试一项测试 ABI检查 有关 make xcheck 特定测试的详细信息 编写测试用例 使用交叉编译器进行测试 已知的测试套件失败 abi-check bug-ate ...

  8. TestNG·TestSuite测试套件

    引言 如何一次运行多个测试类,为了解决这个问题,引入了TestSuite测试套件的概念. 不同的测试类可以组装成一个具备测试相关功能的套件,这个套件就叫做TestSuite.比如TestSuite有测 ...

  9. Unittest自动化测试框架教程(五)——Python中的测试套件TestSuite

      "  本文介绍了unittest中测试套件的相关概念,并通过实例帮助理解测试套件存在的意义,自由享用即可." PS:" 老规矩,老手or实战应用型用户文末看总结,学习 ...

最新文章

  1. 机器学习实战第一步:特征选择与特征工程「附代码」
  2. Mybatis映射文件(3)
  3. Linux 上不可修改的文件和目录
  4. Restful framework【第七篇】权限组件
  5. OC系列foundation Kit基础-NSString
  6. 微服务一定要使用Spring-Cloud吗?
  7. JavaFX 2 GameTutorial第1部分
  8. js微信小程序页面左上角返回跳转指定页面
  9. linq4j java8_Linq4j简明介绍
  10. ubuntu配置pip3以及scrapy
  11. Intellij IDEA打开Java项目并启动
  12. 通过PDMS系统文件快速批量添加颜色规则
  13. html5的图片上传插件,分享5个好用的javascript文件上传插件
  14. RabbitMQ系列8 TTL 死信队列 延迟队列
  15. c#操作Excel表格插入行和列代码
  16. fatal: 无法创建 '/xxx/xxx/xxx/xxx/.git/index.lock':文件已存在。似乎另外一个 git 进程在这个仓库中运行,例如:'git commit' 命令打开了一个编辑
  17. 程序员之路:Gmail邮箱客户端配置
  18. Ubuntu18.04配置YCM
  19. Linux配置MySQL远程访问权限
  20. 数如何避免数据存储安全存在五大灾难?

热门文章

  1. centos7配置IP地址CentOS7 修改hostname,ip地址以及hosts(永久生效)
  2. 实战生产环境vCenter HA配置(VCSA6.5)
  3. Spring学习总结(33)—— 用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景?
  4. Kubernetes学习总结(5)——Kubernetes 常见面试题汇总
  5. 软件工程学习总结(4)——软件工程概论
  6. lucene 增量 全量 更新索引_搜索引擎:该如何设计你的倒排索引?
  7. node.js发送html,利用Node.JS实现邮件发送功能
  8. mysql 事务 innodb 锁表_MySQL性能优化之Innodb事务系统,值得收藏
  9. webpack4下import()模块按需加载,打包按需切割模块,减少包体积,加快首页请求速度...
  10. 9.jsonp的实现原理