【问题标题】:Unable to run scala specs2 tests parallely from sbt prompt无法从 sbt 提示符并行运行 scala specs2 测试
【发布时间】:2013-07-12 07:01:13
【问题描述】:

以下是我的课程。

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 并行运行这些规范?

【问题讨论】:

    标签: scala sbt specs2


    【解决方案1】:

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

    class MasterSpec {
      def is = 
        Step(setup) ^ 
          inline(new Spec1) ^ 
          inline(new Spec2) ^ 
        Step(teardown)
    
      def setup = "setup code".pp 
      def teardown = "teardown code".pp
    }
    

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

    【讨论】:

      猜你喜欢
      • 2014-11-11
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2016-02-29
      • 1970-01-01
      相关资源
      最近更新 更多