Gradle+JUnit 5环境下Java原生assert无法触发,求配置排查
问题分析与解决方案
你遇到的核心问题是:JUnit Platform Gradle插件创建的junitPlatformTest任务没有启用JVM断言开关,导致被测代码里的Java原生assert语句无法触发。
你的配置里虽然写了tasks.withType(Test) { enableAssertions = true },但因为JUnit Platform插件会生成专门的junitPlatformTest任务来执行JUnit 5测试(而非默认的test任务),这个设置可能没有正确覆盖到它;或者你实际运行的是默认test任务,而它并没有执行你的JUnit 5测试逻辑。
修正步骤
方案1:直接配置junitPlatformTest任务
把你的断言启用和日志配置直接绑定到junitPlatformTest任务上,替换原来单独的test块:
junitPlatformTest { // 启用JVM断言开关,触发原生assert语句 enableAssertions = true // 保留你需要的日志格式 testLogging { exceptionFormat = 'full' } }
方案2:统一配置所有Test类型任务
如果希望所有测试任务都启用断言,可以保留tasks.withType(Test)的配置,同时删掉单独的test块,避免冗余:
tasks.withType(Test) { enableAssertions = true testLogging { exceptionFormat = 'full' } }
关键验证点
运行测试时,确保执行的是gradle junitPlatformTest命令,而不是gradle test。因为默认的test任务不会处理JUnit 5测试(除非你额外适配),只有junitPlatformTest才是JUnit Platform插件用来执行JUnit 5测试的入口。
修改后,被测代码里的assert语句在条件不满足时,就会抛出AssertionError,并被JUnit捕获上报测试失败了。
内容的提问来源于stack exchange,提问作者Steve Brandli
相关产品推荐
相关产品推荐

