由于工作中都是使用maven来构建项目,所以下面有关环境搭建都是使用的maven(IDE使用的idea)

凡是开发对于JUnit这个框架一定都不陌生,JUnit 作为一个单元测试框架已经诞生了数十年。而JUnit 5在JUnit 4发布多年后的2017年也终于发布了。

JUnit 5架构体系

作为最新版本的JUnit框架,JUnit 5相比之前版本的JUnit框架有了较大的突破,添加了许多新特性。
之前的JUnit 框架所有的功能都被打包在一个构件(artifact)中。它被提供给开发者、IDE、构建工具、其他测试框架、其他扩展等使用,不同的使用者,依赖的都是一个同样的jar包。

而JUnit 5 最重要的一大优化就是其架构体系,它由三个不同子项目的几个不同模块组成。

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

JUnit Platform 其主要作用是在 JVM 上启动测试框架。它定义了一个抽象的 TestEngine API 来定义运行在平台上的测试框架,同时还支持通过命令行、Gradle 和 Maven 来运行平台。通过 JUnit Platform,其他的自动化测试引擎或开发人员自己定制的引擎都可以接入 Junit 实现对接和执行

JUnit Jupiter 包含了 JUnit 5 最新的编程模型和扩展机制; Jupiter 本身也是一个基于 Junit Platform 的引擎实现。

JUnit Vintage 兼容JUnit3,JUnit4 版本的测试引擎

再来看下JUnit 5的架构图

我们来进一步看看各个子项目的作用。

第一层 : 开发人员(这里只进行业务开发撰写单元测试) 使用junit-jupiter-api等测试框架api编写单元测试

第二层 : 测试引擎,JUnit 或其他测试框架实现引擎API的框架,jupiter-engine和 vintage-engine分别是junit 4和junit 5 对测试引擎API的实现,其他的测试框架也可以通过实现引擎API从而接入JUnit 平台

第三层: 平台引擎 junit-platform-engine 是上一层各种引擎实现的抽象,即引擎的接口标准。

第四层: 启动器 通过ServiceLoader发现测试引擎的实现并安排其执行。 它为IDE和构建工具提供了API,因此IDE可以与测试执行交互,例如,通过启动单个测试并显示其结果。

JUnit 5的环境搭建

再来说下使用中最需要注意的环境搭建吧

Intellij IDEA 从 2016.2 开始就对 JUnit 5提供了基本的支持。如果你使用的是IDEA 2019及以上的版本,那么就放心使用吧。我使用的就是2019.2.3 完全OK !

前面说过JUnit还支持通过使用命令行、Gradle 和 Maven 来运行平台。如果你的项目是使用maven构建的,那么你就需要使用 Maven Surefire 插件来运行你的JUnit 测试平台。

如果你只是需要在IDE运行你的测试用例,那么你只要使用junit-jupiter对应的pom即可,不需要引入junit-platform等测试引擎相关的依赖。

如果想在maven下运行Junit5的测试用例,那么你就需要junit-jupiter-api,junit-jupiter-engine以及junit-platform-launcher,以及maven surefire插件,如下所示:

 <build><plugins><plugin><!--注意如果使用的surefire plugin是2.22.2以下的版本,那么请也引入junit-platform-surefire-provider--><artifactId>maven-surefire-plugin</artifactId><version>2.22.2</version><!-- <dependencies><dependency><groupId>org.junit</groupId><artifactId>junit-platform-surefire-provider</artifactId><version>1.1.0</version></dependency></dependencies>--></plugin></plugins></build><dependencyManagement><dependencies><dependency><groupId>org.junit</groupId><artifactId>junit-bom</artifactId><version>5.6.1</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement><dependencies><!--因为使用了参数化测试,所以我引入了params--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-params</artifactId><scope>test</scope></dependency><!-- 不需要单独引入junit-platform-engine,junit-jupiter-engine已经帮我们引入了--><dependency><groupId> org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><scope>test</scope></dependency><dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-launcher</artifactId><scope>test</scope></dependency></dependencies>

需要注意的有两点:
1.maven surefire插件的版本
2.使用junit-bom来统一管理Junit5各子项目的版本,其好处就不用我多说了。

如果你想要同时在JUnit 5的平台上使用Junit 4和Junit 3的单元测试,就可以移除junit 低版本的依赖,改为如下pom

        <dependency><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId><scope>test</scope></dependency>

JUnit 5 API 生命周期

JUnit 5提供了很多新特性,相对的也会有大量新的API。在开发过程中大家是不是都遇到过升级完版本之后,发现以前使用的API突然就不支持了。JUnit 5 团队为了解决这个问题,明确各个API的使用范围,对所有的API 设立了生命周期。主要分为以下五种状态

内部 API(internal)
不允许被 JUnit 开发者之外的任何人使用。这部分 API 可能被移除,并且不会事先通知。

已过时(Deprecated)
不应该再被使用的 API,它们可能在下次小版本发布时被移除。

实验阶段(Experimental)
为一些新的、实验阶段的特性所使用的 API,这些新特性可能会或已经被公开使用并接受反馈中。
可以使用,但要谨慎。这些 API 未来可能被提升至 维护中 或 稳定 级别,但也可能不带提前通知就被移除。

维护中(Maintained)
使用该 API 的特性,至少在该大版本的下一个小版本发布时不会发生向后不兼容的改变。如果未来有移除维护中 API 的计划,它会先被打回到 已过时 阶段。

稳定(Stable)
使用该 API 的特性,至少在下个大版本发布之前不会发生向后不兼容的改变。

所有JUnit 对外公开的类都带有一个 @API(status) 注解,其中 status就是上面枚举值中的一个。

参考资料:
「译」JUnit 5 系列:基础入门
Junit5 用户指南

关于JUnit5 你必须知道的(一) JUnit5架构和环境搭建相关推荐

  1. junit5和junit4_JUnit 5 –设置

    junit5和junit4 2015年11月, JUnit Lambda团队展示了他们的原型 . 此后,该项目更名为JUnit 5,并于2016年2月发布了Alpha版本.我们将在一系列简短文章中进行 ...

  2. Junit5集成到SpringBoot工程

    1.说明 Spring Boot进行单元测试, 通过集成spring-boot-starter-test, 同时支持Junit4和Junit5测试框架, 下面使用Junit5进行单元测试, 基于一个已 ...

  3. JUnit5 Maven 依赖项

    了解使用 Maven 配置其 JUnit5 的不同模块,以及如何使用它们创建和执行测试. 请注意,JUnit5 在运行时需要 Java8. 1. JUnit5 Maven 依赖项 要通过 maven ...

  4. JUnit5 测试套件示例

    使用 JUnit5 测试套件,您可以运行分散到多个测试类和不同包中的测试. JUnit5 提供了两个注解:@SelectPackages和@SelectClasses以创建测试套件. 此外,您可以使用 ...

  5. Mockito verify Junit5集成 Mockito

    Mockito 集成 Junit5 在学习Mockito 如何集成 Junit5 之前,先来学习下 Mockito 基础的verify功能. Maven依赖 本篇博客代码的Maven依赖如下,源码地址 ...

  6. 超级详细!!!SpringBoot2核心技术与响应式编程尚硅谷完整知识点笔记 下篇 自动配置、容器、Web、数据响应、拦截器、SQL、NOSQL、原理、Junit5、Actuator、外部化配置等

    所有配套资料已上传到QQ群:167356412  需要的话群文件自取 06.数据访问 1.SQL 1.数据源的自动配置-HikariDataSource 1.导入JDBC场景 <dependen ...

  7. 《单元测试》Junit5入门教程——非常详细,入门即精通

    本文为在霍格沃兹测试开发学社中学习到的一些技术,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 单元测试-Junit5入门教程 一.添加Junit5依赖 二.Junit5 常用注 ...

  8. 单元测试实践思考(junit5+jmockit+testcontainer)

    文章目录 背景 方案设计 单元测试指导思想 单层隔离 内部穿透 技术实现 依赖管理 基础架构 封装Junit5&Jmockit 单元测试配置 TestContainer封装 官方方案 实际方案 ...

  9. JUnit5学习之七:参数化测试(Parameterized Tests)进阶

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于<JUnit5学习>系列 <JU ...

最新文章

  1. 【南洋理工-CVPR2022】视觉语言模型的条件提示学习
  2. python怎么读excel文件-用python读写excel文件
  3. 如何从一个对话框弹出单文档视图
  4. jQuery自定义漂亮的下拉框插件8种效果演示
  5. OAuth2.0授权码模式原理与实战
  6. 分布式 和 集群的区别
  7. Linux进程相关的一些笔记
  8. 手把手教你用WPE“修改”各种魔兽SF
  9. 17 张程序员专属壁纸,太太太太太太骚了…
  10. 伍德里奇计量经济学导论第6版笔记和课后习题答案
  11. 红帽linux 6.5下载地址,红帽linux系统下载|红帽linux(RHEL) v6.5 beta 官方版 - 软件下载 - 绿茶软件园|33LC.com...
  12. python应聘项目经历怎么写_简历中、面试中,怎么描述你的工作/项目经历?
  13. NLP,能辅助法官判案吗? | CCF C³
  14. 韩天峰 - Swoole4-全新的PHP编程模式
  15. 《Cracking the Coding Interview程序员面试金典》----猫狗收容所
  16. 用VSCode打开带图片的.md文件
  17. Hive SQL 使用不了union all : SemanticException Cartesian products are disabled for safety reasons
  18. 孟婆汤传说!!!感人至极!
  19. vue+iview 兼容IE11浏览器
  20. JS生成浏览器唯一标识解决方案

热门文章

  1. ActiveMQ的几种集群配置
  2. SpringCloud:Zuul 路由访问(基本使用、路由功能、过滤访问、服务降级)
  3. 测试原理_OTDR测试原理及注意事项
  4. linux 查看磁盘空间 拷贝不同目录下的文件
  5. 关于My Sql update语句不能用子查询的解决办法
  6. 微软System Center Operations Manager 2012(SCOM )安装图文教程
  7. KineticJS教程(3)
  8. Cisco SSL ×××
  9. linux基于usb启动配置
  10. 《父亲家书》选:母亲的手摔伤了