我想创建一个与数据库互操作的几个规格。
class DocumentSpec extends mutable.Specification with BeforeAfterExample {
sequential
def before() = {createDB()}
def after() = {dropDB()}
// examples
// ...
}
数据库中创建和前和每一个实施例(其被顺序地执行)之后丢弃。 Everithing按预期工作,直到只有一个,与数据库中运行规范。 因为规格并行地执行,它们干扰和故障。
我希望我能够通过指示specs2运行与顺序副作用测试,同时保持无副作用测试并行运行,以避免这种情况。 可能吗?
我假设你正在使用SBT? 如果是这样,查看文档: http://www.scala-sbt.org/release/docs/Detailed-Topics/Parallel-Execution
相关SBT设置parallelExecution
。 添加到您的项目定义:
parallelExecution in Test := false
如果你想运行在顺序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在评论中提到正确的,这将使得测试在一个单一的规范顺序执行! 其他规格仍可能并行运行。
同时有一个更好的解决方案( 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 )
)
我没有测试过,如果这可以由每个子项目被覆盖,所以,分项目可以并行运行的测试。