如何通过Kotiln Gradle和-D将系统属性赋予我的测试

时间:2019-06-17 10:02:05

标签: java gradle kotlin spock

当我在Gradle中运行测试时,我想传递一些属性:

./gradlew test -DmyProperty=someValue

因此,在我的Spock测试中,我将使用该值:

def value = System.getProperty("myProperty")

我正在使用kotlin gradle dsl。当我尝试使用本文档中的“ tasks.test”时: https://docs.gradle.org/current/userguide/java_testing.html#test_filtering

我的build.gradle.kts文件中没有识别出

'test'。

我假设我需要使用与下面的帖子中的答案类似的东西,但是尚不清楚在使用gradle kotlin DSL时应该如何做。

How to give System property to my test via Gradle and -D

2 个答案:

答案 0 :(得分:2)

您所链接问题的答案可以1:1转换为kotlin DSL。这是使用junit5的完整示例。

dependencies {
    ...
    testImplementation("org.junit.jupiter:junit-jupiter:5.4.2")
    testImplementation(kotlin("test-junit5"))
}

tasks.withType<Test> {
    useJUnitPlatform()

    // Project property style - optional property.
    // ./gradlew test -Pcassandra.ip=xx.xx.xx.xx
    systemProperty("cassandra.ip", project.properties["cassandra.ip"])

    // Project property style - enforced property.
    // The build will fail if the project property is not defined.
    // ./gradlew test -Pcassandra.ip=xx.xx.xx.xx
    systemProperty("cassandra.ip", project.property("cassandra.ip"))

    // system property style
    // ./gradlew test -Dcassandra.ip=xx.xx.xx.xx
    systemProperty("cassandra.ip", System.getProperty["cassandra.ip"])
}

答案 1 :(得分:0)

此示例演示了将系统属性传递给junit测试的三种方式。其中两个一次指定一个系统属性。最后一种方法避免了必须通过获取gradle运行时可用的所有系统属性并将它们传递给junit测试工具来向前声明每个系统属性。

Activity