Bas*_*que 7 parallel-processing scala scalatest
假设我有 6 个测试套件:ABCDEF,我希望 ABC 顺序运行,然后并行运行 DEF。
输出如下:
A
B
C // always in that order
E
D
F // The order doesn't matter
Run Code Online (Sandbox Code Playgroud)
这个想法是能够独立于其余测试来测试 ABC。
我已经尝试过的
创建一个像这样的超级顺序测试类并添加@DoNotDiscover
顺序测试。
A
B
C // always in that order
E
D
F // The order doesn't matter
Run Code Online (Sandbox Code Playgroud)
但是,即使 ABC 顺序运行,也会与其他测试并行运行。
我也尝试过
class MasterSuite extends Stepwise(
Sequential(new A, new B, new C)
)
Run Code Online (Sandbox Code Playgroud)
但对我来说,它按顺序运行所有测试(也许我错过了build.sbt
文件中的某些内容)。
的文档Stepwise
说明如下:
\n\nStepwise 和 Sequential 之间的区别在于,尽管 Stepwise 按顺序执行其自己的嵌套套件,但它会将传递给它的任何分配器传递给这些嵌套套件。因此,如果定义了该分发器,则嵌套套件可以并行运行自己的嵌套套件和测试。相比之下,Sequential 总是将 None 传递给嵌套套件,因此传递给 Sequential 构造函数的嵌套套件中包含的任何测试和嵌套套件都将按顺序执行。
\n
所以显而易见的问题是:Distributor
传递给 的runNestedSuites
方法的是什么MasterSuite
?因为这Distributor
就是最终要传递给包含、和的对象runNestedSuites
的方法的内容。Suites
D
E
F
通过调试器的实验,我发现Distributor
通常是None
. 但是,如果您将该ParallelTestExecution
特征混合到您的MasterSuite
类中,您将得到一个Some
,并且我也在调试器中验证了这一点。
class MasterSuite extends Stepwise(\n new A,\n new B,\n new C,\n new Suites(new D, new E, new F)) with ParallelTestExecution\n
Run Code Online (Sandbox Code Playgroud)\n现在,MasterSuite
将依次运行A
、B
和C
然后开始并行运行其他套件。
那么,问题解决了吗?不幸的是,没有,因为虽然它显然开始运行D
,E
并且F
并行地运行,但它没有等待它们完成,只是声明它们全部成功 \xe2\x80\x93 即使我故意添加了一个失败的测试来F
查看是否一切正常正确。据我所知,这就是它应该完成的方式,但它只是被破坏了。
经过多年的 ScalaTest 经验,我得出了个人结论:它是一个充满 bug 的垃圾,我强烈建议远离它。很抱歉我无法给出比这更乐观的答案。
\n