本文档包含自 5.11 GA 以来所有 JUnit 5 版本的变更日志。
请参考用户指南,获取为编写测试的程序员、扩展作者、引擎作者以及构建工具和 IDE 供应商提供的全面参考文档。
5.12.0
发布日期: 2025 年 2 月 21 日
范围
-
测试和容器的输出文件附件
-
Open Test Reporting XML 输出的改进
-
资源锁定义改进
-
测试超时时的线程转储
-
参数化测试验证改进
-
自动注册扩展的过滤支持
-
用于断言的 Kotlin 契约
-
可配置的 Jupiter 扩展上下文作用域
-
ConsoleLauncher
的增强功能 -
更好地支持 GraalVM 本机镜像的使用
-
改进了对基于文件的测试引擎的发现支持
-
可自定义的类路径扫描
-
JUnit Vintage 引擎中的并行执行支持
-
大量的错误修复和其他增强功能
有关此版本所有已关闭的 issue 和 pull request 的完整列表,请查阅 GitHub 上 JUnit 仓库中的 5.12.0-M1、5.12.0-RC1、5.12.0-RC2 和 5.12.0 里程碑页面。
JUnit 平台
弃用和重大变更
-
来自
junit-platform-commons
的SearchOption
和AnnotationSupport.findAnnotation(Class, Class, SearchOption)
已被弃用。
新特性和改进
-
ConsoleLauncher
现在接受所有--select
选项的多个值。 -
ConsoleLauncher
现在支持--select-unique-id
选项,以通过唯一 ID 选择容器和测试。 -
ConsoleLauncher
支持新的--exclude-methodname
和--include-methodname
选项,以基于不带参数的完全限定方法名包含或排除方法。例如,--exclude-methodname=^org\\.example\\..+#methodname
将排除包org.example
下所有名为methodName
的方法。 -
ConsoleLauncher
的--select-file
和--select-resource
选项现在支持行号和列号。 -
新的
ReflectionSupport.makeAccessible(Field)
公共实用方法,供第三方使用,以代替直接调用内部ReflectionUtils.makeAccessible(Field)
方法。 -
ReflectionSupport.tryToLoadClass(…)
实用方法现在支持查找"void"
伪类型,这间接支持 JUnit Jupiter 中参数化测试中"void"
的String
到Class
转换。 -
EngineDiscoveryRequestResolver.Builder
中的新addResourceContainerSelectorResolver()
方法,支持发现基于类路径资源的测试,类似于现有的addClassContainerSelectorResolver()
方法。 -
EngineDiscoveryRequest
和TestPlan
中的新getOutputDirectoryProvider()
方法,允许测试引擎通过调用EngineExecutionListener.fileEntryPublished(…)
将文件发布/附加到容器和测试。注册的TestExecutionListeners
然后可以通过覆盖fileEntryPublished(…)
方法来访问这些文件。 -
以下是对 Open Test Reporting XML 输出所做的改进
-
如果适用,XML 报告现在包含有关 Git 仓库、当前分支、提交哈希和当前工作树状态的信息。
-
当添加到类路径/模块路径时,open-test-reporting 现在会将一个包含有关每个测试/容器的 JUnit 特定元数据的部分写入 HTML 报告
-
有关已发布文件的信息现在作为附件包含在内。
-
如果启用了输出捕获,则写入
System.out
和System.err
的捕获输出现在包含在 XML 报告中。
-
-
从非测试线程写入到
System.out
和System.err
的输出现在归因于最近启动或已写入输出的测试或容器。 -
新的公共接口
ClasspathScanner
,允许第三方提供用于扫描类路径以查找类和资源的自定义实现。 -
新的
AnnotationSupport.findAnnotation(Class, Class, List)
方法,支持在内部类及其运行时封闭实例类型上搜索注解。 -
新的
TestDescriptor.orderChildren(UnaryOperator<List<TestDescriptor>> orderer)
方法,用于就地排序子节点
JUnit Jupiter
错误修复
-
为
DisplayNameGenerator
实现提供@Nested
测试类和包含的测试方法的运行时封闭类型。在此更改之前,此类生成器只能访问声明@Nested
的封闭类,但它们无法访问封闭实例的具体运行时类型。 -
现在在
@Nested
测试类的运行时封闭类型上发现@DisplayNameGeneration
注解,而不是@Nested
类声明的编译时封闭类。 -
修复 Windows 上在
@TempDir
清理期间对“连接点”的处理:删除目录时将不再跟随连接点,并且将删除损坏的连接点。
弃用和重大变更
-
当将
TestInfo
注入到测试类构造函数中时,TestInfo
现在包含正在为其创建测试类实例的测试方法的数据,除非测试实例生命周期设置为PER_CLASS
(在这种情况下,它将继续包含测试类的数据)。如果您需要测试类的TestInfo
,您可以实现@BeforeAll
生命周期方法并将TestInfo
注入到该方法中。 -
当将
TestReporter
注入到测试类构造函数中时,发布的报告条目现在与测试方法而不是测试类关联,除非测试实例生命周期设置为PER_CLASS
(在这种情况下,发布的报告条目将继续与测试类关联)。如果您想为测试类发布报告条目,您可以实现@BeforeAll
生命周期方法并将TestReporter
注入到该方法中。
新特性和改进
-
Assertions
中 Kotlin 特定断言方法的 Kotlin 契约。 -
现在在测试类构造函数上支持
@TempDir
。 -
现在可以通过新的
@ResourceLock#providers
属性以编程方式在运行时确定共享资源锁,该属性接受ResourceLocksProvider
的实现。 -
现在可以通过新的
@ResourceLock(target = CHILDREN)
属性配置直接子节点的共享资源锁。当测试类声明READ
锁时,但这可能会提高并行化,但只有少数方法持有READ_WRITE
锁。 -
@EnumSource
具有新的from
和to
属性,支持在指定范围内选择枚举常量。 -
在
@ParameterizedTest
方法中,如果@JavaTimeConversionPattern
中的新nullable
属性设置为true
,则现在可以为 Java Date/Time 类型(例如LocalDate
)提供null
值。 -
新的
@ParameterizedTest(allowZeroInvocations = true)
属性允许指定在某些情况下缺少调用是预期的,并且不应导致测试失败。 -
参数化测试现在支持参数计数验证。如果设置了
junit.jupiter.params.argumentCountValidation=strict
配置参数或@ParameterizedTest(argumentCountValidation = STRICT)
属性,则声明的参数数量与参数源提供的参数数量之间的任何不匹配都将导致错误。默认情况下,只有在提供的参数少于声明的参数时才会报错。 -
ArgumentsProvider
(通过@ArgumentsSource
声明)、ArgumentConverter
(通过@ConvertWith
声明)和ArgumentsAggregator
(通过@AggregateWith
声明)实现现在可以使用来自已注册ParameterResolver
扩展的构造函数注入。 -
TestTemplateInvocationContextProvider
扩展现在可以通过覆盖新的mayReturnZeroTestTemplateInvocationContexts()
方法来发出信号,表明它们可能返回零个调用上下文。 -
实现
TestInstancePreConstructCallback
、TestInstanceFactory
、TestInstancePostProcessor
、ParameterResolver
或InvocationInterceptor
的扩展可以覆盖getTestInstantiationExtensionContextScope()
方法,以在测试类实例化期间调用的Extension
方法中启用接收测试作用域的ExtensionContext
。此行为将在未来版本的 JUnit 中成为默认行为。 -
新的
PreInterruptCallback
接口为希望在@Timeout
扩展调用Thread#interrupt()
之前被调用的Extensions
定义了 API。 -
当通过
junit.jupiter.execution.timeout.threaddump.enabled
配置参数启用时,将注册PreInterruptCallback
的实现,该实现在由于超时而中断测试线程之前将线程转储写入System.out
。 -
TestReporter
现在允许为测试方法或测试类发布文件,这些文件可用于将其包含在测试报告中,例如 Open Test Reporting 格式。 -
现在可以使用可以指定为配置参数的包含和排除模式过滤自动注册的扩展。
-
基于 JRE 的条件(例如
@EnabledOnJre
和@DisabledForJreRange
)现在支持任意 Java 版本。有关详细信息,请参阅用户指南。 -
当删除目标位置在临时目录之外的符号链接时,
@TempDir
扩展现在会在清理期间发出警告,以表明目标文件或目录未被删除,仅删除了指向它的链接。
JUnit Vintage
新特性和改进
-
增加了对并行执行测试类和/或方法的支持。有关更多信息,请参阅用户指南。
5.11.4
发布日期: 2024 年 12 月 16 日
范围: 自 5.11.3 以来的错误修复和增强功能
有关此版本所有已关闭的 issue 和 pull request 的完整列表,请查阅 GitHub 上 JUnit 仓库中的 5.11.4 里程碑页面。
5.11.3
发布日期: 2024 年 10 月 21 日
范围: 自 5.11.2 以来的错误修复和增强功能
有关此版本所有已关闭的 issue 和 pull request 的完整列表,请查阅 GitHub 上 JUnit 仓库中的 5.11.3 里程碑页面。
5.11.2
发布日期: 2024 年 10 月 4 日
范围: 自 5.11.1 以来的错误修复和增强功能
有关此版本所有已关闭的 issue 和 pull request 的完整列表,请查阅 GitHub 上 JUnit 仓库中的 5.11.2 里程碑页面。
5.11.1
发布日期: 2024 年 9 月 25 日
范围: 自 5.11.0 以来的错误修复和增强功能
有关此版本所有已关闭的 issue 和 pull request 的完整列表,请查阅 GitHub 上 JUnit 仓库中的 5.11.1 里程碑页面。
JUnit 平台
5.11.0
发布日期: 2024 年 8 月 14 日
范围
-
用于
@ParameterizedTest
方法的@FieldSource
注解 -
用于参数化测试的可重复
@..Source
注解 -
用于编写动态和参数化测试的增强功能
-
用于自动关闭测试中字段资源的
@AutoClose
注解 -
用于从字符串转换为受支持目标类型的
ConversionSupport
实用程序 -
用于指定发现选择器的可扩展语法
-
@BeforeSuite
和@AfterSuite
注解 -
引擎的类路径资源扫描支持
-
关于字段和方法搜索算法的大量错误修复和增强功能
有关完整详细信息,请在线查阅 5.11.0 发行说明。