如何使用gradle测试将命令行参数传递给测试?

2022-09-02 23:50:15

我正在使用gradle来运行JUnit测试。问题是我需要将参数从命令行传递到测试。我尝试传递系统属性,但失败了。

gradle test -Darg1=something

这是我的测试:

public class MyTest {
    @Test
    public void someTest() throws Exception {
        assertEquals(System.getProperty("arg1"), "something");
    }
}

它失败是因为没有参数。是否有可能以某种方式传递命令行参数?arg1


答案 1

运行 时,将系统参数传递给 Gradle JVM,而不是运行测试的测试 JVM。它以这种方式设计,以保护测试免受副作用的影响。gradle test -Darg1=smtharg1

如果需要将参数传播到测试,请使用类似如下的内容

test {
    systemProperty 'arg1', System.getProperty('arg1')
}

并以相同的方式运行它。


答案 2

使用 -D 将参数送入。这样:

./gradlew test -Dgrails.env=dev -D<yourVarName>=<yourValue>

请参阅 -D 的 gradle 命令行文档

要在测试中访问它,您需要在 build.gradle 文件中传播它。

    test {
       systemProperty "propertyName", "propertyValue"
    }

您还可以传递所有系统属性,如下所示:

    test {
        systemProperties(System.getProperties())
    }