我正在尝试使用gradle使用以下命令运行测试,但它无效
gradle cleanTest test --tests my.package.TestSuite
我的测试套件如下所示
@RunWith(Suite.class)
@Suite.SuiteClasses({
ATests.class,
BTests.class,
CTests.class
})
public class MySuite {
/* placeholder, use this to contain all integration tests in one spot * */
}
尝试运行以下命令可以正常工作,但更加严重的是,它会运行两次测试。一次单独,然后再在同一名称空间中的测试套件下
gradle clean test --tests my.package.*
我可以放弃测试套件并以这种方式执行,但我想更好地了解这里发生的事情,以及为什么我不能告诉它直接运行测试套件。
答案 0 :(得分:7)
以下适用于我本地。
gradle -Dtest.single=MySuite clean test
这实际上使用了不同的方法(测试包含)与--test
使用的更高级的过滤方法。
如引用的链接中所述,上面的示例通过创建**/MySuite*.class
形式的文件包含模式来工作,而--test
尝试从扫描的测试集中选择测试。我怀疑Gradle中实现的通用测试过滤与JUnit Suite跑步者的具体案例之间存在一些不可预见的相互作用。
话虽如此,即使是Gradle文档警告说上述方法已被取代,实际上我可能会回应@Opal的评论,并定义一个明确的任务来为特定的测试阶段运行套件。例如,以下gradle clean testSuite
运行可能会运行集成套件。
task testSuite(type: Test) {
include 'MySuite.class'
}
参考文献: