我在集成测试中碰到了一个问题。我的代码使用系统属性(System.getProperty(...)),我无法在运行集成测试时设置系统属性。有关如何定义在集成测试中运行的代码中可见的系统属性的任何想法吗?
我正在使用Grails 3.3.1。 减少了没有看到系统属性的集成测试示例:
package injecttest
import grails.testing.mixin.integration.Integration
import grails.transaction.*
import org.springframework.beans.factory.annotation.Autowired
import spock.lang.Specification
@Integration
@Rollback
class C1ITSpec extends Specification {
void "test system property readable inside test"() {
String val = System.getProperty("var1", "ERROR")
expect:"system variable to match value passed as '-Dvar1=OK' in command line"
"OK" == val
}
}
答案 0 :(得分:0)
分叉了一个新的 JVM 来运行测试,因此您必须将命令行系统属性传递给测试的 JVM。
在使用 gradle 的 Grails 4 中,您可以在 gradle 文件中传递系统属性:
integrationTest.doFirst {
systemProperties System.getProperties().subMap(["var1"])
}
我根据 Grails 3 的这个问题的答案改编了这个:How to give System property to my test via Gradle and -D。