使用参数化Junit测试中的命令行参数或系统属性?

时间:2012-01-13 18:20:16

标签: groovy junit junit4 gradle

我使用此方法设置参数化数据:

@Parameterized.Parameters
public static Collection<Object[]> getStories() {
        Collection<Object[]> allStories = new ArrayList<Object[]>()
        new File(SPEC_DIRECTORY).eachFileRecurse(FileType.FILES) { file ->
            if (file.getName().endsWith('.story')) {
                Object[] args = [file.getName(), file]
                allStories << args
            }
        }
        return allStories
    }

我通过gradle test使用gradle调用主要测试,但我似乎无法看到系统属性。

如果我使用调用gradle -Dfile=test.story,则System.getProperty('file')未定义。如何将参数传递给此参数化数据构建器?

2 个答案:

答案 0 :(得分:5)

Gradle在单独的JVM中运行所有测试。您必须配置test任务:

test {
    systemProperty "file", "test.story"
}

有关详细信息,请参阅Gradle DSL reference

答案 1 :(得分:1)

为了那些偶然发现这个问题的初学者(像我一样)的利益;我想明确提到gradle测试任务中的systemProperty只是将系统属性传递给测试jvm。所以,如果你只是使用

test{
systemProperty 'Chrome', 'Browser' }   

您无法通过&#39;在junit测试中访问该媒体资源。 System.getProperty(&#34;浏览器&#34;)&#39; 。相反,它需要与命令gradle test -DBrowser = Chrome

结合使用

以上情况仅仅是一个例子,使用 -

可能是有意义的
test{
    systemProperty 'Chrome', System.getProperty('Browser') } 

一起
gradle test -DBrowser=Chrome