class Spec1 {
def is = {
function1 ^
function2 ^
function3 ^
end
}
def function1 = {
println("Spec1")
}
def function2 = {
Thread.sleep(120000)
println("sleeping-Spec1")
}
def function3 = {
println("Spec1")
}
}
class Spec2 {
def is = {
function1 ^
function2 ^
function3 ^
end
}
def function1 = {
println("Spec2")
}
def function2 = {
println("Spec2")
}
def function3 = {
println("Spec2")
}
}
class MasterSpec {
def is = {
Step(setup) ^ new Spec1 ^ new Spec2 ^ Step(teardown)
}
def setup = {
setup code
}
def teardown = {
teardown code
}
}
从sbt提示符我运行test-only MasterSpec
预期产量: - 打印报表将随机打印。因为默认情况下sbt并行运行specs。输出应该看起来像这样。
Spec2
Spec1
Spec1
Spec2
sleeping-Spec1
Spec2
实际产量: - 打印报表是有序的。
Spec1
sleeping-Spec1
Spec1
Spec2
Spec2
Spec2`
当我在各个规格中复制MasterSpec中的设置和拆卸方法并运行test-only Spec1 Spec2
时,我能够并行运行它们。为什么test-only MasterSpec
不能并行运行测试?有没有办法可以从MasterSpec平行运行这些规格?
答案 0 :(得分:1)
示例执行的并行性确实在规范边界处停止。您可以做的一件事是inline
Spec1
和Spec2
的内容:
class MasterSpec {
def is =
Step(setup) ^
inline(new Spec1) ^
inline(new Spec2) ^
Step(teardown)
def setup = "setup code".pp
def teardown = "teardown code".pp
}
但显示器会有所不同。特别是,您不会看到每个规范的spec start / spec end和statistics,但所有示例都将并行执行。