4

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

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

[更新]:

我有以下配置

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 中,从日志中,似乎没有相关信息?谢谢

4

2 回答 2

4

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

  • 让每个受影响的测试将单例重置为已知状态。
  • 确保每个受影响的测试由不同的Test任务执行(因此在不同的测试 JVM 中运行)。
  • 摆脱单身人士。
于 2013-07-16T08:11:02.080 回答
3

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

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

在这两种情况下,你都应该没问题。

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

于 2013-07-16T06:20:31.890 回答