如何运行顺序规范(How to run specifications sequentially)

2019-08-17 05:32发布

我想创建一个与数据库互操作的几个规格。

class DocumentSpec extends mutable.Specification with BeforeAfterExample {
  sequential

  def before() = {createDB()}
  def after() = {dropDB()}

  // examples
  // ...
}

数据库中创建和前和每一个实施例(其被顺序地执行)之后丢弃。 Everithing按预期工作,直到只有一个,与数据库中运行规范。 因为规格并行地执行,它们干扰和故障。

我希望我能够通过指示specs2运行与顺序副作用测试,同时保持无副作用测试并行运行,以避免这种情况。 可能吗?

Answer 1:

我假设你正在使用SBT? 如果是这样,查看文档: http://www.scala-sbt.org/release/docs/Detailed-Topics/Parallel-Execution

相关SBT设置parallelExecution 。 添加到您的项目定义:

parallelExecution in Test := false


Answer 2:

如果你想运行在顺序specs2单一规格只需添加sequential在你规范的开头方法调用。 例如:

class MyTest extends Specification {
  // Set sequential execution
  sequential

  // This tests will be executed sequentially
  "my test" should {
    "add numbers" in {
      (1 + 1) should be equalTo 2
    }

    "multiply numbers" in {
      (2 * 2) should be equalTo 4
    }
  }
} 

更新:由于@jsears在评论中提到正确的,这将使得测试在一个单一的规范顺序执行! 其他规格仍可能并行运行。



Answer 3:

同时有一个更好的解决方案( http://www.scala-sbt.org/release/docs/Parallel-Execution.html ):

SBT 0.12.0介绍了限制超出了通常的排序声明任务并发一般的基础设施。

此配置将运行所有测试顺序,如果他们也都在子项目:

concurrentRestrictions in Global := Seq(
  Tags.limit(Tags.CPU, 2),
  Tags.limit(Tags.Network, 10),
  Tags.limit(Tags.Test, 1),
  Tags.limitAll( 15 )
)

我没有测试过,如果这可以由每个子项目被覆盖,所以,分项目可以并行运行的测试。



文章来源: How to run specifications sequentially
标签: scala specs2