我想创建几个与数据库互操作的规范.
class DocumentSpec extends mutable.Specification with BeforeAfterExample {
sequential
def before() = {createDB()}
def after() = {dropDB()}
// examples
// ...
}
Run Code Online (Sandbox Code Playgroud)
在每个示例之前和之后(按顺序执行)创建和删除数据库.Everithing按预期工作,直到只有一个规范适用于数据库.由于规范是并行执行的,因此会干扰和失败.
我希望我能够通过指示specs2顺序运行具有副作用的测试同时保持副作用免费测试并行运行来避免这种情况.可能吗?
Rég*_*les 36
我想你在使用SBT?如果是这样,请查看文档:http://www.scala-sbt.org/release/docs/Detailed-Topics/Parallel-Execution
相关的SBT设置是parallelExecution.将其添加到项目定义中:
parallelExecution in Test := false
Run Code Online (Sandbox Code Playgroud)
Iva*_*tyk 36
如果要在规范2中依次运行单个规范,只需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
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:正如评论中正确提到的@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 )
)
Run Code Online (Sandbox Code Playgroud)
我还没有测试这是否可以被每个子项目覆盖,所以子项目可以并行运行它的测试。
| 归档时间: |
|
| 查看次数: |
14493 次 |
| 最近记录: |