运行Gradle test任务时如何在应用中正确获取传入的VM options参数
问题原因
Gradle的test任务运行在独立的JVM进程中,你在命令行通过-D传入的参数是属于Gradle主进程的JVM参数,默认不会自动传递给测试进程,所以测试代码里调用System.getProperty("testProfile")会返回null。
解决方案
你只需要修改项目的Gradle构建配置,将需要的系统属性显式传递给测试进程即可,分两种配置语法:
1. Groovy DSL(对应build.gradle文件)
在构建文件中添加如下test配置:
test { // 传递指定的系统属性到测试JVM systemProperty 'testProfile', System.getProperty('testProfile') // 可新增默认值:不传参数时默认用local profile,写法如下 // systemProperty 'testProfile', System.getProperty('testProfile', 'local') }
2. Kotlin DSL(对应build.gradle.kts文件)
在构建文件中添加如下配置:
tasks.test { systemProperty("testProfile", System.getProperty("testProfile") ?: "local") }
配置完成后,你原来的启动命令gradle test -DtestProfile=dockerTest就可以正常生效,TestActiveProfilesResolver可以读取到对应的属性值,激活对应环境的配置文件。
可选扩展方案
你也可以通过Gradle项目参数传递,避免和Gradle本身的系统属性冲突:
- 命令行调用改为用
-P传项目参数:
gradle test -PtestProfile=dockerTest
- 对应的test配置修改为:
// Groovy DSL写法 test { systemProperty 'testProfile', project.findProperty('testProfile') ?: 'local' }
// Kotlin DSL写法 tasks.test { systemProperty("testProfile", project.findProperty("testProfile")?.toString() ?: "local") }
内容的提问来源于stack exchange,提问作者Вячеслав Чернышов
相关产品推荐
相关产品推荐

