Java基础学习总结(101)——Junit5抢鲜看
来源:互联网 发布:南宁智尚网络骗局 编辑:程序博客网 时间:2024/05/24 04:56
JUnit 4的发布背1. Java 8支持景现状
Mr.JUnit 4.0 发布于2006年2月,来看看当时社区的反映:
Great!This is the best message I seen recently.
Me too. I think JUnit is one of most successful OpenSource Projects. Thank you Mr.JUnit.
如今11年过去了,Junit伴随着很多Java程序员的成长,11年间陆续发布了13个小版本,最后版本落版于4.12。
2013年底的一份调查统计了GitHub 3万个工程,显示JUnit在Java工程中占比30.7%:
这11年间Mr.JUnit建立自己的生态圈,TDD曾风靡一时,如令JUnit更是一统江湖。
在当时发布之时,也受到诸多天时的制约:
Java 5发布1年多,很多公司还在使用JDK1.4。
Spring 初出茅庐,还没有拿到Jolt和JAX大奖。
Maven 方面仅仅是2.0Beta阶段。
JUnit 4也一直没有很好的解决扩展问题,它所提供扩展就是'将就'出来的!。Runner和Rules是扩展JUnit的主要手段,前者虽然强大,但是粒度太粗,扩展者需要从零实现全测试周期的支持,并且一个单元测试类只能绑定一个Runner,无法同时使用多个Runner。Rules虽然解决了粒度的问题,但扩展能力非常有限,只能作用于测试周期的特定阶段。
而如令,新技术、新的编程理念日新月异:
Java 8 (2014年3月)发布已经整整过去3年。
Spring 已经进入Boot & Cloud时代。
Maven 都3.5了。
相对于其它的递进速度,从2015年10月开始的JUnit 5大版本节奏还是稍稍缓了点,目前JUnit 5.0.0-M4发布于4月2号,JUnit 5最终版本估计在第三季度发布。
JUnit 5 的定位
JUnit 5作为JUnit的下一代测试框架,其目标是为JVM上的开发人员创建一个与时俱进的测试框架。聚焦于Java 8,并且支持多种不同的测试风格。打开JUnit 5 的文档,你会发现有一个显著的字眼:JUnit as a Platform,这意味着什么?一种JVM上面的测试平台,通过引入JUnit Platform,JUnit 5不但可以运行老板本的JUnit测试,甚至还可以运行其它的测试框架,这儿祭出其架构视图:
从上图可以看完,完整的JUnit 5平台自顶向下共分为四层:
面向Developer的API层,比如各种测试注解。
特定于某一单元测试框架的测试引擎。
通用的测度平台引擎。
面向开发工具/构建工具执行入口。
上面两层体现的是JUnit as a Tool,还属于JUnit原本的范畴,而下面两层体现的就是JUnit as a Platform。
JUnit 5也应此释放了憋了快10年的大招,此招一出,谁与争锋?
JUnit 5 特性尝鲜
Java 8支持
说到Java 8 就不得不说Lambda,那么JUnit Lambda 如何?
对于assertLambda测试失败时描述:
使用Lambda进行联合检查,并获得了所有的值。并不像Junit4中一旦失败,你只能从测试报告中获取失败的第一个值,而永远也不会知道其它值。同时对测试用例断言的编写方式更是更上一楼层。一种更好的组织方式。
还有应该你已经注意到了:没有public!
2. Nested(嵌套)测试
常常对于用例的管理,需要根据其特性进行分组管理,JUnit 5提出的@Nested,正是适合此场景。
是的,你将看到如下的执行结果:
可以将某一特性的测试分组归类,你问在Nested中能不能进行更深一级的嵌套?答案是肯定!一切如你期望的那样,这也正是我们期望的结果。
正如你所见的:@DisplayName,给用例起个好点的名字,一个名字影响的可是一生!
3. Extention(扩展)性更强
JUnit 4只扩展的局限性前面已经提到,JUnit 5已经在这方面做了很大的改动,借用JUnit Lambda中的一句话:“好的扩展方式优于已经实现的特性”。
所有的JUnit注解可以被当做元注解去使用,Jupiter Engine可以很好的识别并处理。
如果只是这样,那么仅仅也只是简化了书写或者冠以别名,当然了不可能,还有更强大的@ExtendWith,它涉及到测试周期的各个阶段,比如激活条件,参数解析,回调函数,异常处理等。通过实现特定接口,配合@ExtendWith注解,你很容易就可以重新定义一个单元测试的执行流程。
配合ExtendWith的请参考:MockitoExtension和SpringExtension。
还有很多变动等着你去探索,不妨去GitHub或JUnit 5 User Guide 溜一圈。
重要的事情说三边!Mr.JUnit 5憋的大招将在今年第三季度发布!
Are you Ready ?
- Java基础学习总结(101)——Junit5抢鲜看
- Java基础学习总结(20)——基础语法
- Junit5断言(Assertions)
- java基础学习总结——流
- java基础学习总结——流
- java基础学习总结——流
- java基础学习总结——流
- java基础学习总结——数组
- java基础学习总结——流
- java基础学习总结——接口
- java基础学习总结——接口
- java基础学习总结——流
- java基础学习总结——数组
- java基础学习总结——接口
- Java基础学习总结——接口
- Java基础学习总结——数组
- Java基础学习总结——线程
- java基础学习总结——数组
- Zedboard---实验七秒计数
- 04-树5 Root of AVL Tree (25分)
- 67-套接字超时(select)
- ES6学习——集合(Collections):WeakMap 应用示例
- docker
- Java基础学习总结(101)——Junit5抢鲜看
- RecyclerView基础介绍
- php学习笔记一基本配置
- 存储之IP SAN(ISCSI)
- Bootstrap的目录结构
- 你真的会使用枚举么
- HDU 5375 Gray code
- Protobuf 协议的Java应用sample
- bzoj2219 【原根】【CRT】