如何使用Gradle运行多个命名测试?

时间:2018-05-29 15:58:28

标签: java gradle junit

我知道怎么说

gradle test --tests mypackage.MyTest

但是如何指定多个?

gradle test --tests mypackage.MyTest,mypackage.model.ModelTest,BasicTests

这似乎是随机进行的一项测试。

gradle test --tests mypackage.MyTest mypackage.model.ModelTest BasicTests

这告诉我

  

任务' mypackage.model.ModelTest'在根项目' myproject'。

中找不到

我阅读了很多手册和教程(以及一些SO帖子),并没有明确提到答案。但我看到有人经过 - 测试"包装。*"作为一个论点,所以我认为空格周围的引号可能会有所帮助。

gradle test --tests "mypackage.MyTest mypackage.model.ModelTest BasicTests"

这不会很快失败,但不幸的是只运行列表中的第一个测试。

所以我猜我刚刚被复数误导了#34; - 测试"并且没有办法真正给它一个列表,对吗?

1 个答案:

答案 0 :(得分:2)

Testing in Java & JVM projects上的文档文章非常清楚--tests选项的工作原理。它只是一个包含过滤器,用于注册要执行的所有匹配测试,与在includeTestsMatching任务的filter块中使用Test的方式相同:

test {
    filter {
        includeTestsMatching 'org.gradle.internal.*'
    }
}

这也是参数名称中复数的原因,因为通配符允许包含任意数量的测试。

  

请注意,通配符'*''.'包分隔符没有特别的了解。它纯粹基于文本。因此--tests *.SomeTestClass将匹配任何包,无论其“深度”如何。

从Gradle 4.7开始,如果使用大写字母启动过滤器,则可以使用没有包信息的简单类名。

要包含多个不共享公共包结构的测试,您必须并且可以使用多个--tests参数,如文档中所述:

  

另请注意,可以提供多个--tests选项,其所有模式都将生效。

有关测试过滤器的更多信息,请参阅上面的链接和相关问题:

How to run only one test class on gradle

正如有关您的某种方法无效的其他信息:

  

在命令行上执行Gradle符合以下结构。在任务名称之前和之后允许选项。

     

gradle [taskName...] [--option-name...]

在第三个示例中,--tests选项的其他选项被解释为任务名称,这解释了错误消息,因为具有指定名称的任务不存在。

为了防止选项值和任务名称之间的混淆并阻止任何shell干扰,您应该按照Mr Haki in his blog的建议在引号之间定义过滤器。