ScalaTest:如何混合并行和顺序测试

flvtvl50  于 2022-11-23  发布在  Scala
关注(0)|答案(2)|浏览(141)

假设我有6个测试套件:A B C D E F,我希望A B C按顺序运行,THEN并行运行D E F。
输出如下:

A
B
C // always in that order
E
D
F // The order doesn't matter

这样做的目的是为了能够在独立于其他测试的情况下测试ABC。
"我已经尝试过的"
创建一个超级顺序测试类,并在顺序测试中添加@DoNotDiscover

class MasterSuite extends Stepwise(
  Sequential(new A, new B, new C)
)

但是,即使A、B、C按顺序运行,也会与其他测试并行运行。
我也试过

class MasterSuite extends Stepwise(
  Sequential(new A, new B, new C),
  Suites(new D, new E, new F)
)

但对我来说,它按顺序运行我所有的测试(也许我在build.sbt文件中遗漏了一些东西)。

mrphzbgm

mrphzbgm1#

Stepwise的文档说明如下:
Stepwise和Sequential之间的差异在于,虽然Stepwise会循序执行自己的巢状套件,它会将传递给它的散发者传递给这些巢状套件。因此,如果定义了该散发者,巢状套件就可以平行执行自己的巢状套件和测试。相比之下,Sequential永远会将散发者的None传递给巢状套件。因此传递给Sequential构造器的嵌套套件中包含的任何测试和嵌套套件都将按顺序执行。
所以显而易见的问题是:什么Distributor被传递给MasterSuiterunNestedSuites方法?因为Distributor是最终要传递给Suites对象的runNestedSuites方法的,该对象包含DEF
通过调试器的实验,我发现Distributor通常是None,但是如果你把ParallelTestExecution特征混合到你的MasterSuite类中,你会得到一个Some,我也在调试器中验证了这一点。

class MasterSuite extends Stepwise(
  new A,
  new B,
  new C,
  new Suites(new D, new E, new F)) with ParallelTestExecution

现在,MasterSuite将依次运行ABC,然后开始并行运行其他套件。
那么,问题解决了吗?不幸的是,没有,因为当它 * 开始 * 并行运行DEF时,它没有等待它们 * 完成 *,而是直接宣布它们都成功了--尽管我故意在F中添加了一个失败的测试,以查看是否一切都正常工作。所以就我所见,本来应该这样做的,现在却坏了
这使我在多年使用ScalaTest的经验之后得出了我个人的结论:这是一个充满了bug垃圾,我强烈建议远离它。很抱歉,我不能给出比这更乐观的答案。

pvcm50d1

pvcm50d12#

可能与我刚刚报道的this issue有关。

相关问题