0

以下是我的课程。

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 并行运行规范。输出应该看起来像这样。

Spec2
Spec1
Spec1
Spec2
sleeping-Spec1
Spec2

实际输出:- 打印语句按顺序排列。

Spec1
sleeping-Spec1
Spec1
Spec2
Spec2
Spec2`

当我从 MasterSpec 在各个规范中复制设置和拆卸方法并运行test-only Spec1 Spec2时,我能够并行运行它们。为什么不test-only MasterSpec并行运行测试?有没有办法可以从 MasterSpec 并行运行这些规范?

4

1 回答 1

1

示例执行的并行性确实在规范边界处停止。您可以做的一件事是对andinline的内容: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
}

显示会有点不同。特别是您不会看到每个规范的规范开始/规范结束和统计信息,但所有示例都将并行执行。

于 2013-07-11T23:01:13.780 回答