Java新一代单元测试框架JUnit5速览
为什么学JUnit5
Java技术栈的单元测试框架有两个:JUnit和TestNG,有种说法是TestNG比JUnit更强大,学TestNG就够了,但是当我打开GitHub看到star的时候,犹豫了:
JUnit

TestNG

相差了足足有3K之多。带着这个困惑,我在网上查阅了一番资料,原来JUnit5相较于JUnit4有了重大升级,已经包含了TestNG的所有功能。为了坚定我学JUnit的想法,我咨询了身边做Java开发的朋友,开发写UT都是用的JUnit。这两个理由足以让我开始对JUnit5的学习。
JUnit5是什么
跟之前的JUnit有所不同,JUnit5由三个子项目的模块组成:
JUnit5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
- JUnit Platform 在JVM上启动测试框架的基础,不仅支持Junit自制的测试引擎,其他测试引擎也都可以接入。提供了从命令行启动平台的Console Launcher,和支持JUnit4环境的JUnit4 based Runner。IDE一般都集成了JUnit Platform,比如IntelliJ IDEA。
- JUnit Jupiter JUnit5新特性,结合了新的programming model和extension model,以便于在JUnit5中编写测试和扩展。提供了在平台上运行基于Jupiter测试的TestEngine。
- JUnit Vintage 提供了在平台上运行基于JUnit3和JUnit4测试的TestEngine,照顾老的项目。
JUnit5新特性
使用JUnit Jupiter写测试
示例代码:
import static org.junit.jupiter.api.Assertions.assertEquals;
import example.util.Calculator;
import org.junit.jupiter.api.Test;
class MyFirstJUnitJupiterTests {
private final Calculator calculator = new Calculator();
@Test
void addition() {
assertEquals(2, calculator.add(1, 1));
}
}
注意这个导包的路径org.junit.jupiter.api,Jupiter就是JUnit5的新特性。
兼容JUnit4和JUnit3
JUnit Vintage提供了在平台上运行基于JUnit3和JUnit4测试的TestEngine, 并且新的包org.junit.jupiter避免了和JUnit4的org.junit在classpath上有任何冲突。
多IDE运行
JUnit能在IntelliJ IDEA、Eclipse、NetBeans、Visual Studio Code等IDE中运行。
从JUnit Jupiter扩展Model
示例:
@ExtendWith(RandomParametersExtension.class)
@Test
void test(@Random int i) {
// ...
}
给test方法注册了一个新的RandomParametersExtension。
更多高级用法
JUnit5提供了更多高级用法,比如JUnit Platform Launcher API和JUnit Platform Test Kit等,这些会在之后的文章逐一进行介绍。
小结
本文首先解释了为什么要学JUnit5,一是因为全新一代JUnit功能更加强大,二是Java开发写单元测试都是用的JUnit,然后介绍了JUnit5是什么以及它的新特性。学习JUnit,在单元测试这条路上,又往前迈了一步。
参考资料:
https://junit.org/junit5/docs/current/user-guide/
https://blog.csdn.net/weixin_45876795/article/details/111059031
Java新一代单元测试框架JUnit5速览的更多相关文章
- Java - Junit单元测试框架
简介 Junit : http://junit.org/ JUnit是一个开放源代码的Java语言单元测试框架,用于编写和运行可重复的测试. 多数Java的开发环境都已经集成了JUnit作为单元测试的 ...
- TestNg JAVA 自动化单元测试框架Demo
TestNg TestNg 是java的一个自动化单元测试框架 参考:http://testng.org/doc/index.html 环境准备 既然是java 的自动化单元测试框架,就必须要有jav ...
- .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍
Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...
- 用 Java 写个塔防游戏「GitHub 热点速览 v.21.37」
作者:HelloGitHub-小鱼干 本周 GitHub Trending 的主题词是:多语言.本周特推的 C 语言教程是大家都知道的阮一峰编写的,想必和他之前的技术文章类似,能起到科普作用.再来时 ...
- Java单元测试框架 JUnit
Java单元测试框架 JUnit JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于KentBeck的sUnit的xUnit家族中为最成功的一 ...
- Java反射学习总结终(使用反射和注解模拟JUnit单元测试框架)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 本文是Java反射学习总结系列的最后一篇了,这里贴出之前文章的链接,有兴趣的可以打开看看. ...
- 在线体验 Windows 11「GitHub 热点速览 v.21.30」
作者:HelloGitHub-小鱼干 有什么比无需安装系统,检测硬件兼容度,只要打开一个浏览器,输入某个神秘的地址回车,即可体验 Windows 11 更棒的呢?windows11 就是这么一个小工具 ...
- Google C++单元测试框架GoogleTest---AdvancedGuide(译文)下
因为AdvancedGuide文档太长,分上下两部分,本文档接googletest--AdvancedGuide(译文)上:Google C++单元测试框架GoogleTest---AdvancedG ...
- 快看Sample代码,速学Swift语言(1)-语法速览
Swift是苹果推出的一个比较新的语言,它除了借鉴语言如C#.Java等内容外,好像还采用了很多JavaScript脚本里面的一些脚本语法,用起来感觉非常棒,作为一个使用C#多年的技术控,对这种比较超 ...
随机推荐
- 前端面试 CSS三大特性
CSS的三大特性 1.层叠性 代码由上向下执行,相同选择器设置到同一元素上,样式冲突的,会执行比较靠近html的样式,样式不冲突的情况下不影响 代码如下 <!DOCTYPE html> & ...
- Java_集合之三
1.红黑树 1.1概述[理解] 红黑树的特点 平衡二叉B树 每一个节点可以是红或者黑 红黑树不是高度平衡的,它的平衡是通过"自己的红黑规则"进行实现的 红黑树的红黑规则有哪些 每一 ...
- redis中keys命令带来的线上性能问题
起因 下午接到运维反馈,生产redis有个执行keys的命令请求太慢了,要两三秒才能响应 涉及命令如下: KEYS ttl_600::findHeadFootData-15349232-*-head ...
- [BD] Sqoop
什么是Sqoop 数据交换工具(ETL):RDBMS(MySQL.Oracle等)<-->Sqoop<-->HDFS(HBase.Hive等) 基于JDBC 执行数据交换时,本 ...
- 【转载】深入理解OpenStack-手动制作qcow2镜像
深入理解OpenStack-手动制作qcow2镜像 2018-01-18 手动制作镜像 1 官方虽提供qcow2系统镜像,但对于有需求的企业来说,还是定制镜像比较靠谱,下面就手动定制一个镜像 给虚拟机 ...
- SSM整合(ForestBlog为例)
SSM整合(ForestBlog为例) 原版本github地址 :https://github.com/saysky/ForestBlog 文中版本地址:https://github.com/Yans ...
- hugboy源库
=[个人整理的一些源库,均来自网络]= -[Ubuntu]- #阿里源 Ubuntu 20.04 deb http://mirrors.aliyun.com/ubuntu/ focal main re ...
- 9.11 strace:跟踪进程的系统调用 、ltrace:跟踪进程调用库函数
strace 是Linux环境下的一款程序调试工具,用于检查一个应用程序所使用的系统调用以及它所接收的系统信息.strace会追踪程序运行时的整个生命周期,输出每一个系统调用的名字.参数.返回值和执行 ...
- 端口映射(socket应用)
# coding=gb2312 import sys import time import socket import thread import subprocess ############### ...
- linux环境下时区无法设置(UTC无法更改为CST)的问题解决
在进行linux下修改时区的时候 总是修改不了 修改成 Asia/Shanghai 但是 时区总是 +0000 却不是想要的+0800 按照网上的方法 A方法:tzselect:执行tzselect ...