Junit5 的前世今生

前言

Junit 自从 Junit3 版本开始,就一度是 Java 世界最为流行的自动化测试框架,但在 Junit4 版本上停留超过 11 年,王座逐渐被 TestNG 等后起之秀超越。如今 Junit5 已强势回归,包含了大量的全新特性和更新,最新的5.7版本中很多实验功能已经转为stable状态,可以放心使用了,本专栏系列将结合实例来逐一介绍 Junit5 中这些令人激动的变化和实用场景。

JUnit5 的前世今生

Junit 的作者是大名鼎鼎的 Kent Beck,敏捷开发的发起人之一,并且是极限编程(XP)和测试驱动开发(TDD)的创始人,对现代软件开发模式有着深远的影响。伴随着敏捷和 TDD 的发展,Junit 也成为 Java 世界应用最为广泛的自动化测试框架。

Junit3 在大量的 Java 应用开发中已经得到了广泛的应用,而到了 Junit4 更引入了灵活的注解模式,一度成为 Java 应用单元测试的事实标准,但是自 2006 年发布 Junit4,到 2017 年推出 JUnit5,已经超过 11 年的大版本停滞,很多功能已经难以跟上软件研发潮流的变化。Junit 也被后起之秀如 TestNG 等逐渐超越。回过头看看发布 Junit4 时的 2006年初:

  • Java 5 发布才 1 年多,很多公司还在使用 JDK 1.4,离 Java 6 正式发布还有大半年,如今最主流的 Java 8 还没有影子。

  • Spring 框架才初出茅庐,离获得 Jolt 和 JAX 大奖尚有几个月,2.0 尚未发布,更别提Spring Boot 和 Spring Cloud。

  • Maven 也不过才是 2.0 Beta 阶段,更别提 Maven 3了。

所以不难理解如今 Junit4 的困难:

  • 可扩展性不足,在自动化测试的很多便利性上难以跟上时代又较难扩展,比如本讲要介绍的分组、参数化,以及后续会介绍的并行测试、自定义扩展等

  • 非模块化,Junit4 是一个单一的 Jar 包引用,All in One 对于版本本身的灵活性和迭代发展不利,也不利于使用者根据需要选择必须的功能。

  • 对 Java 8 的支持,函数化编程已经逐渐成为现今软件开发的主流,对 Lambda 表达式的使用支持渐渐成为自动化测试框架不得不考虑的重点需求。

基于以上原因,Junit 迫切需要比较彻底的重构,于是 Junit 团队基于 Junit-Lambda 版本发布了 Junit5。可以说,Junit5 从框架构成上,已经完全区别于之前的 Junit 版本,完全可认为是一个全新的框架(当然功能上对 Junit 历史版本还是提供了良好的兼容),不止于此,Junit5 将不单纯是 Junit 框架的进化,更是预期以一个平台的全新面貌横空出世,也就是说,Junit5 开始,将不单纯只是一个测试框架,而且会作为一个 Platform,提供其他各类测试框架的接入能力,包括之前的各类竞争对手,自此都可以接入同一个平台体系,成为 Junit 生态的一部分。

JUnit5 框架构成

和 Junit4 只是一个单独的 Jar 包不同,目前的 Junit5 组成如下:

image

  • JUnit Platform ,从名字也可以看出来,这是 Junit 向测试平台演进,提供平台功能的模块,通过 JUnit Platform,其他的自动化测试引擎或开发人员自己定制的引擎都可以接入 Junit 实现对接和执行。试想下将 TestNG 运行在 Junit 上,是不是有点意思了?

  • JUnit Jupiter, 这是 Junit5 的核心,可以看作是承载 Junit4 原有功能的演进,它包含了很多丰富的新特性来使 JUnit 自动化测试更加方便、功能更加丰富和强大。本系列就会重点围绕 Jupiter 中的一些特性进行介绍。Jupiter 本身也是一个基于 Junit Platform 的引擎实现。

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

下图说明了 Junit5 各组件之间的依赖关系:

image

下图则更加清晰地描述了 Junit5 的整体架构:

image

(图片来自 JUnit 5 - An Early Test Drive - Part 1

  • 第一层,用户基于引擎接口编写自动化测试

  • 第二层,Junit 本身以及其他自动化测试框架实现的自动化引擎框架,Jupiter 和 Vintage 其实都是引擎实现,其他自动化测试框架如 TestNG 也可以通过实现引擎接入 Junit Platform

  • 第三层,平台引擎,抽象上一层各种引擎实现的通用功能。Junit 团队正在致力于联合各大自动化框架形成一套统一的标准,此事若成,形成测试行业的自动化标准,则对产业发展的影响不可估量。

  • 最底层,启动器。是面向各类 IDE 的接口,不同的 IDE 可以据此来实现对 JUnit 的调度、运行。

到这里我们已经基本了解 Junit5 的总体构成以及体现出的愿(Ye)景(Xin),下面我们还是回到现实,看看 Junit5 到底带来了哪些具体的变化,我们怎么在具体工作中用好 Junit5?

按:
后续篇章将结合实例详细展现 Junit5 的强大改进和功能实例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值