为什么学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写测试

示例代码:

  1. import static org.junit.jupiter.api.Assertions.assertEquals;
  2. import example.util.Calculator;
  3. import org.junit.jupiter.api.Test;
  4. class MyFirstJUnitJupiterTests {
  5. private final Calculator calculator = new Calculator();
  6. @Test
  7. void addition() {
  8. assertEquals(2, calculator.add(1, 1));
  9. }
  10. }

注意这个导包的路径org.junit.jupiter.apiJupiter就是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

示例:

  1. @ExtendWith(RandomParametersExtension.class)
  2. @Test
  3. void test(@Random int i) {
  4. // ...
  5. }

给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速览的更多相关文章

  1. Java - Junit单元测试框架

    简介 Junit : http://junit.org/ JUnit是一个开放源代码的Java语言单元测试框架,用于编写和运行可重复的测试. 多数Java的开发环境都已经集成了JUnit作为单元测试的 ...

  2. TestNg JAVA 自动化单元测试框架Demo

    TestNg TestNg 是java的一个自动化单元测试框架 参考:http://testng.org/doc/index.html 环境准备 既然是java 的自动化单元测试框架,就必须要有jav ...

  3. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

  4. 用 Java 写个塔防游戏「GitHub 热点速览 v.21.37」

    作者:HelloGitHub-小鱼干 本周 GitHub Trending 的主题词是:多语言.本周特推的 C 语言教程是大家都知道的阮一峰编写的,想必和他之前的技术文章类似,能起到科普作用.再来时 ...

  5. Java单元测试框架 JUnit

    Java单元测试框架 JUnit JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于KentBeck的sUnit的xUnit家族中为最成功的一 ...

  6. Java反射学习总结终(使用反射和注解模拟JUnit单元测试框架)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 本文是Java反射学习总结系列的最后一篇了,这里贴出之前文章的链接,有兴趣的可以打开看看. ...

  7. 在线体验 Windows 11「GitHub 热点速览 v.21.30」

    作者:HelloGitHub-小鱼干 有什么比无需安装系统,检测硬件兼容度,只要打开一个浏览器,输入某个神秘的地址回车,即可体验 Windows 11 更棒的呢?windows11 就是这么一个小工具 ...

  8. Google C++单元测试框架GoogleTest---AdvancedGuide(译文)下

    因为AdvancedGuide文档太长,分上下两部分,本文档接googletest--AdvancedGuide(译文)上:Google C++单元测试框架GoogleTest---AdvancedG ...

  9. 快看Sample代码,速学Swift语言(1)-语法速览

    Swift是苹果推出的一个比较新的语言,它除了借鉴语言如C#.Java等内容外,好像还采用了很多JavaScript脚本里面的一些脚本语法,用起来感觉非常棒,作为一个使用C#多年的技术控,对这种比较超 ...

随机推荐

  1. utf8改成utf8mb4实战教程

    前言: 在 MySQL 中,系统支持诸多字符集,不同字符集之间也略有区别.目前最常用的字符集应该是 utf8 和 utf8mb4 了,相比于 utf8 ,utf8mb4 支持存储 emoji 表情,使 ...

  2. 『居善地』接口测试 — 5、使用Requests库发送POST请求

    目录 1.请求正文是application/x-www-form-urlencoded 2.请求正文是raw (1)json格式文本(application/json) (2)xml格式文本(text ...

  3. Spring Cloud Gateway之全局异常拦截器

    /** * @version 2019/8/14 * @description: 异常拦截器 * @modified: */ @Slf4j public class JsonExceptionHand ...

  4. 《Ray Tracing in One Weekend》阅读笔记 - 9、Metal(金属)

    如果我们希望不同的物体使用不同的材料,则需要进行设计决策.我们可以使用具有许多参数的通用材料,而将不同的材料类型仅将其中一些参数归零.这不是一个坏方法.或者我们可以有一个抽象的材料类来封装行为.我是后 ...

  5. Spring 实现策略模式--自定义注解方式解耦if...else

    策略模式 定义 定义一簇算法类,将每个算法分别封装起来,让他们可以互相替换,策略模式可以使算法的变化独立于使用它们的客户端 场景 使用策略模式,可以避免冗长的if-else 或 switch分支判断 ...

  6. [bug] java.text.ParseException: Unparseable date: "2020-01-01"

    原因 输入的字符串应和目标字符串格式长度都一样 如返回的字符串是:2019-11-11,但解析的格式是:yyyy-MM-dd  HH:mm:ss,导致错误 参考 https://blog.csdn.n ...

  7. [DB] Spark Core (2)

    RDD WordCount处理流程 sc.textFile("/root/temp/data.txt").flatMap(_.split(" ")).map(( ...

  8. Xrdp - 通过Windows的RDP连接Linux远程桌面(Ubuntu/CentOS/Redhat 7)

    Xrdp - 通过Windows的RDP连接Linux远程桌面(Ubuntu/CentOS/Redhat 7) 您多久访问一次Linux桌面? 您使用什么工具来访问远程桌面? Xrdp是一个开源工具, ...

  9. WPS2019党政机关单位版(无广告困扰)

    WPS2019党政机关单位版(无广告困扰) 科技趣闻 ​ 中国石油大学(华东) 控制科学与工程硕士 17 人赞同了该文章 导读 WPS Office 2019专业版机关版是由WPS官方专为企业.机关单 ...

  10. 分布式存储ceph---openstack对接ceph存储后端(4)

    ceph对接openstack环境 一.使用RBD方式提供存储,如下数据: 1.image:保存glance中的image 2.volume存储:保存cinder的volume:保存创建虚拟机时选择创 ...