无法从sbt提示符并行运行scala specs2测试

时间:2013-07-11 03:00:50

标签: scala sbt specs2

下面是我的课程。

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平行运行这些规格?

1 个答案:

答案 0 :(得分:1)

示例执行的并行性确实在规范边界处停止。您可以做的一件事是inline Spec1Spec2的内容:

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,但所有示例都将并行执行。