【问题标题】:How to pass command line arguments to tests with gradle test? [duplicate]如何使用 gradle test 将命令行参数传递给测试? [复制]
【发布时间】:2017-02-27 18:04:43
【问题描述】:

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

gradle test -Darg1=something

这是我的测试:

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

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

【问题讨论】:

    标签: java gradle junit arguments junit4


    【解决方案1】:

    使用 -D 发送参数。像这样:

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

    见-D的gradle command line documentation

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

        test {
           systemProperty "propertyName", "propertyValue"
        }
    

    您也可以像这样传递所有系统属性:

        test {
            systemProperties(System.getProperties())
        }
    

    【讨论】:

    • 我误读了 OPs 问题,并在刷新页面以查看您的答案之前进行了编辑。
    • 他还有“所有系统属性”选项,您的答案中缺少该选项。
    • 能否在Java代码中使用System.getProperties('yourVarName')获取命令行传递的yourValue
    • 当我在我的 gradle 文件中添加上面提到的测试方法链接时,我收到错误消息“无法找到方法 test() 用于扩展 'android' 类型的参数”,这是最近更新的吗?
    【解决方案2】:

    当您运行gradle test -Darg1=smth 时,您将系统参数arg1 传递给Gradle JVM,而不是运行测试的测试JVM。它的设计目的是保护测试免受副作用。

    如果您需要将参数传播到测试,请使用类似的东西

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

    并以同样的方式运行它。

    【讨论】:

    • 我应该把 test{ systemProperty 'arg1', System.getProperty('arg1')} 脚本放在哪里?我收到此错误:“找不到 arguments() 的方法测试”
    • @Apperside 把这段文字放到build.gradle中
    • 如何设置可以从命令行覆盖的默认值?
    • 当我在我的 gradle 文件中添加上面提到的测试方法链接时,我收到错误消息“无法找到方法 test() 用于扩展 'android' 类型的参数”,这是最近更新的吗?
    猜你喜欢
    • 1970-01-01
    • 2016-10-25
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    相关资源
    最近更新 更多