假设我有6个测试套件:A B C D E F,我希望A B C按顺序运行,THEN在parallel中运行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
文件中遗漏了一些内容(。
Stepwise
的文档说明如下:
Stepwise和Sequential之间的区别在于,尽管Stepwise按顺序执行自己的嵌套套件,但它会将传递给它的分发服务器传递给这些嵌套套件。因此,如果定义了分发服务器,嵌套套件可以并行运行自己的嵌套套件和测试。相比之下,Sequential总是将分发服务器的None传递给嵌套套件,因此传递给Sequentical构造器的嵌套套件中包含的任何测试和嵌套套件都将按顺序执行。
所以显而易见的问题是:Distributor
传递给MasterSuite
的runNestedSuites
方法是什么?因为Distributor
最终将传递给包含D
、E
和F
的Suites
对象的runNestedSuites
方法。
通过调试程序的实验,我发现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
将依次运行A
、B
和C
,然后开始并行运行其他套件。
那么,问题解决了吗?不幸的是,没有,因为虽然它显然开始并行运行D
、E
和F
,但它没有等到它们完成,只是宣布它们都成功了——尽管我故意在F
中添加了一个失败的测试,以查看是否一切正常。就我所见,这就是它应该做的,但它只是坏了。
这让我在多年的ScalaTest经验后得出了个人结论:这是一个充满bug的垃圾,我强烈建议远离它。很抱歉,我不能给出比这更乐观的答案了。
可能与我刚刚报告的这个问题有关。