I want to create few specifications that interoperate with database.
class DocumentSpec extends mutable.Specification with BeforeAfterExample {
sequential
def before() = {createDB()}
def after() = {dropDB()}
// examples
// ...
}
Database is created and dropped before and after every example (which is executed sequentially). Everithing works as expected until there is only one spec that works with database. Because specifications are executed parallel, they interfere and fail.
I hope that I'm able to avoid this by instructing specs2 to run tests with side effects sequentially while keeping side effect free tests to run in parallel. Is it possible?
I suppose you are using SBT? If so, check the documentation: http://www.scala-sbt.org/release/docs/Detailed-Topics/Parallel-Execution
The relevant SBT setting is parallelExecution
. Add this to your project definition:
parallelExecution in Test := false
If you want to run single Specification in specs2 sequentially just add sequential
method call at the beginning of your Specification. For example:
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
}
}
}
UPDATE: As @jsears correctly mentioned in the comments, this will make tests to run sequentially in a single spec! Other specs may still run in parallel.
Meanwhile there is a better solution (http://www.scala-sbt.org/release/docs/Parallel-Execution.html):
sbt 0.12.0 introduces a general infrastructure for restricting task concurrency beyond the usual ordering declarations.
This configuration will run all tests sequential, also if they are in subprojects:
concurrentRestrictions in Global := Seq(
Tags.limit(Tags.CPU, 2),
Tags.limit(Tags.Network, 10),
Tags.limit(Tags.Test, 1),
Tags.limitAll( 15 )
)
I haven't tested if this can be overridden by each sub-project, so the sub-project can run its tests in parallel.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With