rob*_*kuz 87 java testing gradle
我有一个Java程序,它读取一个System属性
System.getProperty("cassandra.ip");
Run Code Online (Sandbox Code Playgroud)
我有一个Gradle构建文件,我开始
gradle test -Pcassandra.ip=192.168.33.13
Run Code Online (Sandbox Code Playgroud)
要么
gradle test -Dcassandra.ip=192.168.33.13
Run Code Online (Sandbox Code Playgroud)
但是System.getProperty将始终返回null.
我找到的唯一方法是在我的Gradle构建文件中添加它
test {
systemProperty "cassandra.ip", "192.168.33.13"
}
Run Code Online (Sandbox Code Playgroud)
我如何通过-D来做到这一点
Jef*_*rey 103
-P标志用于gradle属性,-D标志用于JVM属性.因为测试可以在新的JVM中分叉,所以传递给gradle的-D参数不会传播到测试 - 听起来就像你正在看到的行为.
你可以test
像你一样在你的块中使用systemProperty,但是通过传递给它-P来将它基于传入的gradle属性:
test {
systemProperty "cassandra.ip", project.getProperty("cassandra.ip")
}
Run Code Online (Sandbox Code Playgroud)
或者,如果你通过-D传递它
test {
systemProperty "cassandra.ip", System.getProperty("cassandra.ip")
}
Run Code Online (Sandbox Code Playgroud)
小智 26
碰到这个非常大的问题,除了我不想再次列出gradle脚本中命令行上给出的所有属性.因此,我将所有系统属性发送到我的测试
task integrationTest(type: Test) {
useTestNG()
options {
systemProperties(System.getProperties())
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个案例,我需要将多个系统属性传递给测试JVM但不是所有(不想传递不相关的).基于以上答案,并通过使用subMap
过滤我需要的,这对我有用:
task integrationTest(type: Test) {
// ... Do stuff here ...
systemProperties System.getProperties().subMap(['PROP1', 'PROP2'])
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,只有PROP1
并且PROP2
将被传入,如果它们存在于gradle的JVM中.
这是一个将大量项目属性作为系统属性传递给测试 JVM 的变体。我更喜欢项目属性而不是系统属性以增加灵活性。
task intTest(type: Test) {
systemProperties project.properties.subMap(["foo", "bar"])
}
Run Code Online (Sandbox Code Playgroud)
可以在命令行上传递:
$ gradle intTest -Pfoo=1 -Pbar=2
Run Code Online (Sandbox Code Playgroud)
并在您的测试中检索:
String foo = System.getProperty("foo");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
44502 次 |
最近记录: |