JUnit 6.0.0发布:Java 17基线、取消API与Kotlin协程支持

news/2025/10/22 12:05:19/文章来源:https://www.cnblogs.com/qife122/p/19157635

JUnit团队发布了JUnit 6.0.0(2025年9月30日GA),统一了Platform、Jupiter和Vintage的版本号,并将最低要求提升至Java 17(Kotlin测试代码需Kotlin 2.2)。本次更新增加了对Kotlin挂起测试的原生支持、带有ConsoleLauncher快速失败执行的新CancellationToken API、内置Java Flight Recorder(JFR)监听器、跨模块采用JSpecify空值注解,以及切换到FastCSV进行CSV驱动的参数化测试。Vintage作为JUnit 4的桥梁保留,但现已弃用。

对Kotlin用户而言,最显著的改进是直接挂起支持。此前,协程测试通常将函数体包裹在runBlocking中;而JUnit 6允许开发者在测试和生命周期方法上声明suspend,并直接调用挂起API。这消除了样板代码,使协程测试读起来更像它们所测试的生产代码。

考虑以下代码片段:

// JUnit 6之前
@Test
fun foo() = runBlocking {delay(1000)assertEquals(1, 1)
}// 使用JUnit 6
@Test
suspend fun foo() {delay(1000) // 直接支持挂起调用assertEquals(1, 1)
}

在执行语义方面,JUnit 6为嵌套类定义了确定性的、故意非显而易见的顺序。它还引入了MethodOrderer.Default和ClassOrderer.Default,并将@TestMethodOrder继承到@Nested类中。开发者现在还可以使用@TestClassOrder与@Order为嵌套类施加顺序。

以下示例先运行PrimaryTests,再运行SecondaryTests:

import org.junit.jupiter.api.*;@TestClassOrder(ClassOrderer.OrderAnnotation.class)
class OrderedNestedTestClassesDemo {@Nested @Order(1)class PrimaryTests {@Test void test1() {}}@Nested @Order(2)class SecondaryTests {@Test void test2() {}}
}

所有JUnit模块现在使用JSpecify空值注解来显式指示哪些方法参数、返回类型和字段可以为空。这为Kotlin用户提供了更好的IDE支持、改进的编译时安全性以及更精确的文档,使他们受益于适当的可空/非空类型区分。

JUnit 6从无人维护的univocity-parsers库迁移到FastCSV,用于@CsvSource和@CsvFileSource注解。FastCSV速度显著更快,符合RFC 4180标准,零依赖,并为格式错误的CSV数据提供更好的错误报告。此更改提高了CSV解析行为和整体测试执行性能的一致性。

取消和提前退出行为也得到显著升级。平台现在公开CancellationToken,启动器将其传递给引擎。开发者可以连接自己的监听器以在第一次失败时取消运行,而ConsoleLauncher添加了自动执行此操作的--fail-fast标志。以下代码片段展示了使用新的LauncherExecutionRequest API的监听器驱动方法。像Jupiter和Suite这样的引擎会遵守令牌,因此执行会干净地中止。

import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
import static org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder.discoveryRequest;
import static org.junit.platform.launcher.core.LauncherExecutionRequestBuilder.executionRequest;import java.io.PrintWriter;import org.junit.platform.engine.CancellationToken;
import org.junit.platform.engine.TestExecutionResult;
import org.junit.platform.launcher.*;
import org.junit.platform.launcher.core.LauncherFactory;
import org.junit.platform.launcher.listeners.SummaryGeneratingListener;public class FailFastLauncher {static void main() {CancellationToken token = CancellationToken.create();TestExecutionListener failFast = new TestExecutionListener() {@Overridepublic void executionFinished(TestIdentifier id, TestExecutionResult result) {if (result.getStatus() == TestExecutionResult.Status.FAILED) {token.cancel();}}};SummaryGeneratingListener summary = new SummaryGeneratingListener();LauncherDiscoveryRequest discover = discoveryRequest().selectors(selectClass(FastFailDemoTest.class)).build();LauncherExecutionRequest exec = executionRequest(discover).cancellationToken(token).listeners(failFast, summary).build();try (LauncherSession session = LauncherFactory.openSession()) {session.getLauncher().execute(exec);}summary.getSummary().printTo(new PrintWriter(System.out, true));}
}

JFR支持现在内置在启动器的org.junit.platform.launcher.jfr下,取代了旧的junit-platform-jfr工件。开发者可以在启动测试时开始JFR记录,然后在JDK Mission Control或*.jfr工具中检查发现和执行事件,而无需添加任何额外依赖。详细信息记录在用户指南的“Flight Recorder Support”下。

6.0.0版本移除了长期弃用的junit-platform-runner(JUnit 4运行器)和各种传统的反射和运行器API。团队建议使用IDE/构建工具中的原生平台集成或直接采用Jupiter;Vintage仅作为临时桥梁保留,现已正式弃用。团队可从5.x升级的迁移指南可在wiki上获取。

对于大多数已经使用Java 17和JUnit 5.14的团队来说,采用应该是一个常规的依赖项升级,随后进行快速试运行,现代化任何构建插件(例如Surefire/Failsafe ≥ 3.0),并验证CSV驱动的测试。Kotlin用户可以通过直接挂起方法简化协程测试,并且JFR集成变得更易于采用以进行性能调查。仍在使用JUnit 4的团队应计划迁移工作,因为Vintage的弃用标志着该兼容性路径的结束。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943248.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年10月上海ICL医生推荐榜:王晓瑛领衔五强对比

想在上海做ICL晶体植入,却担心医生经验不足、术后效果不稳、价格不透明?这是不少近视患者共同的焦虑。ICL手术对医生资质、晶体定制、术前评估要求极高,一旦选择失误,可能面临二次手术或视觉质量下降。2025年,上海…

2025年10月消泡剂厂家推荐:权威榜单一网打尽

如果您正在寻找稳定供货、技术响应快、性价比高的消泡剂厂家,大概率会陷入“信息过载”:网页广告繁多、参数口径不一、小厂贴牌混杂,担心样品与批量质量不一致,又怕售后无人跟进。尤其在2025年四季度环保核查趋严、…

详细介绍:老题新解|合法C标识符

详细介绍:老题新解|合法C标识符pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…

国产化Excel开发组件Spire.XLS教程:使用Python将TXT文件转换为CSV

在 Python 中处理数据时,将 TXT 文本文件转换为 CSV 是数据分析、报表生成或跨应用共享数据的常见需求。本文将详细介绍如何借助Spire.XLS使用 Python 实现 TXT 文件转 CSV,包括单文件转换、批量转换以及处理不同分隔…

VMware Holodeck 9.0.1.0 发布 - 自动化部署 VCF 实验环境

VMware Holodeck 9.0.1.0 发布 - 自动化部署 VCF 实验环境VMware Holodeck 9.0 - 自动化部署 VCF 实验环境 高效管理虚拟机 (VM) 和容器工作负载,为本地部署的全栈超融合基础架构 (HCI) 提供云的优势。 请访问原文链接…

【AI大模型前沿】HunyuanWorld-Voyager:腾讯开源的超长漫游世界模型,开启3D场景生成新纪元 - 指南

【AI大模型前沿】HunyuanWorld-Voyager:腾讯开源的超长漫游世界模型,开启3D场景生成新纪元 - 指南2025-10-22 11:52 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal …

[题解]meal

题目描述 下课铃终于响了,你和一群朋友(共 N 人)一起冲到食堂。因为你们到的非常早,现在食堂窗口前面还没有人。食堂共有两个窗口。你们每个人打饭会耗时 a i,打完立刻去座位上吃饭会耗时 b i,由于你们吃完饭要一…

CADSoftTools发布两款重要更新:CAD VCL Multiplatform 16.2 与 CAD .NET 16全新发布

近日,CADSoftTools 宣布推出两款产品更新——CAD VCL Multiplatform 16.2 与 CAD .NET 16。两款新版本均在性能与兼容性方面实现重大提升,为 Delphi、C++Builder 以及 .NET 开发者打造更加高效、现代化的 CAD 应用开…

linux常用命令 - 实践

linux常用命令 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…

2025 年公交/乡村/不锈钢/智能候车亭厂家推荐:江苏丁一城市智能科技有限公司提供定制化方案与全流程服务

行业背景 随着城市化进程不断推进,城市街具作为公共基础设施的重要组成部分,其功能性与美观性需求持续提升。候车亭作为市民日常出行的关键节点设施,不仅需要满足基础的遮风挡雨功能,还需融入智能交互、文化特色与…

python 查看arcgis里面的模板文件都链接着啥内容在arcgis里面输入的代码

我有个arcgis里面有一堆图 在输入代码的框里面输入import arcpy import osmxd = arcpy.mapping.MapDocument("CURRENT") layers = arcpy.mapping.ListLayers(mxd)print "=" * 60 print "ALL …

2025年10月河道防撞护栏厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析

随着城市水利基础设施建设和河道治理要求的不断提升,河道防撞护栏作为保障公共安全的重要设施,其技术标准与市场需求日益提高。根据行业调研数据显示,2024年防撞护栏市场规模已达68亿元,年均增长率稳定在9.5%左右。…

2025年10月宠物空气净化器产品推荐:权威榜单对比评测

把猫砂盆搬进客厅后,空气里总飘着“看不见”的猫毛蛋白,扫地机器人刚走,鼻子又痒了——这是不少养宠家庭在2025年的真实场景。中国小动物保护协会数据显示,城镇犬猫数量已超1.2亿只,同期宠物家庭对“可吸附动物过…

无穷小比较、等价无穷小替换

无穷小比较\(\lim \frac{\beta}{\alpha} = 0\) , \(\beta\) 比 \(\alpha\) 高阶无穷小。 \(\lim \frac{\beta}{\alpha} = \infty\) ,\(\beta\) 比 \(\alpha\) 低阶无穷小。 \(\lim \frac{\beta}{\alpha} = c \neq 0\…

在 Linux 系统上安装 Miniconda、安装 Xinference,并设置 Xinference 开机自启动

一、安装 Miniconda 1. 下载 Miniconda 安装脚本 x86_64 架构: cd ~ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shARM 架构(如树莓派或 Apple Silicon 的 Linux 虚拟机):wget htt…

【项目复现上新】Karpathy大神开源GitHub高分项目NanoChat!仅用100美元+8000行代码手搓ChatGPT

10月13日,AI领域大神AndrejKarpathy发布了自己的最新开源项目。截至当前,GitHub项目上已经达到29.1KStar。The best ChatGPT that $100 can buy. 10 月 13 日,AI 领域大神 AndrejKarpathy 发布了自己的最新开源项目…

实用指南:Ansible实战:VMware下K8s自动化部署指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

作业三(结对编程)-小学四则运算题目生成与判卷(Python + 可视化)

结对作业:小学四则运算题目生成与判卷(Python + 可视化)姓名/学号:翁广驰(3123004409)、关健佳(3121004072) Github项目地址:https://github.com/Gucvii/homeworkPSP2.1 表格(实现前的预估)(1分)PSP 阶段 预…

2025年10月景区钢丝绳护栏厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析

随着旅游业的蓬勃发展和景区安全标准的持续提升,景区钢丝绳护栏作为关键的安全防护设施,其市场需求呈现稳定增长态势。行业统计数据显示,2024年中国景区防护设施市场规模已突破75亿元,其中钢丝绳护栏凭借其优良的安…

技术 | 在单台电脑上管理多个 GitHub 账户并解决推送问题(测试中)

### 在单台电脑上管理多个 GitHub 账户并解决推送问题>在日常开发中,我们经常需要在同一台电脑上使用多个 GitHub 账户(例如个人账号和工作账号),但默认配置下容易出现推送权限错误或提交记录关联到错误账户的问…