在使用gradle时按顺序运行两个测试类 - 并行运行测试

时间:2013-07-16 03:29:41

标签: junit gradle

我们有两个不同的测试类(每个包含几个测试方法),它们可能在并行运行和相同的jvm进程中相互影响。我知道这听起来很糟糕,但目前我们没有简单的解决办法将这两个测试类分开。

如何指定这两个测试类的运行顺序(使它们按顺序运行),而我仍然希望使用gradle --parallel执行并行测试?非常感谢。

[UPDATE]:

我有以下配置

test {
// maxParallelForks=8
testLogging.showStandardStreams=true

    exclude '**/ATests.scala'
    exclude '**/BTests.scala'
}

task runATests(type: Test) {
    include '**/ATests.scala'
}

task runBTests(type: Test) {
    include '**/BTests.scala'
}

如何验证ATests和BTests是否在不同的测试JVM中运行,从日志开始,似乎没有 相关信息?感谢

2 个答案:

答案 0 :(得分:3)

根据Gradle documentation测试,总是在单独的jvm进程中运行。因此,当两个测试都在不同的项目中并且并行运行时,您应该没有问题。

如果它们在同一个项目中,它们不应该并行运行,因为gradle只是并行构建不同的项目,但每个项目本身都是顺序的(特别是测试)。

在这两种情况下你应该没事。

如果要并行化测试,可以查看TestNG,它支持并行测试和依赖项。转换通常不耗费时间,基本上修复所有导入(注释名称相同)并使用测试创建和xml套件文件。

答案 1 :(得分:3)

问题与并行任务或测试执行无关(顺便说一句,这是独立的Gradle功能),因为Gradle在每个测试JVM的单个线程中运行测试。问题只是多个测试访问相同的单例并使对象对该对象的初始状态的期望无效。可能的解决方案:

  • 使每个受影响的测试将单例重置为已知状态。
  • 确保每个受影响的测试由不同的Test任务执行(因此在不同的测试JVM中运行)。
  • 摆脱单身人士。