如何从命令行使用gradle运行测试套件

tam*_*tam 16 java shell gradle

我正在尝试使用gradle使用以下命令运行测试,但它不起作用

gradle cleanTest test --tests my.package.TestSuite
Run Code Online (Sandbox Code Playgroud)

我的测试套件如下所示

@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 * */
}
Run Code Online (Sandbox Code Playgroud)

试图运行以下命令是有效的,但加重的是,它运行每次测试两次.一次单独,然后再在同一名称空间中的测试套件下

gradle clean test --tests my.package.*
Run Code Online (Sandbox Code Playgroud)

我可以放弃测试套件并以这种方式执行,但我想更好地了解这里发生的事情,以及为什么我不能告诉它直接运行测试套件.

小智 8

以下适用于我本地.

gradle -Dtest.single=MySuite clean test
Run Code Online (Sandbox Code Playgroud)

这实际上使用了不同的方法(测试包含)与使用的更高级的过滤方法--test.

如引用的链接中所述,上面的示例通过创建表单的文件包含模式,**/MySuite*.class--test尝试从扫描的测试集中选择测试.我怀疑在Gradle中实现的通用测试过滤与JUnit Suite运行器周围的特定情况之间存在一些不可预见的交互.

话虽如此,即使Gradle文档警告上述方法已被取代,实际上我可能会回应@Opal的评论,并定义一个明确的任务来为特定的测试阶段运行套件.例如,以下运行gradle clean testSuite可能会运行集成套件.

task testSuite(type: Test) {
   include 'MySuite.class'  
}
Run Code Online (Sandbox Code Playgroud)

参考文献:

  • 如果您想确保测试能够运行,我可以这样做:** include'** / MySuite.class'** (2认同)