32

データベースと相互運用する仕様をいくつか作成したいと思います。

class DocumentSpec extends mutable.Specification with BeforeAfterExample {
  sequential

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

  // examples
  // ...
}

データベースは、すべての例(順次実行される)の前後に作成および削除されます。データベースで機能する仕様が1つだけになるまで、Everithingは期待どおりに機能します。仕様は並行して実行されるため、干渉して失敗します。

specs2に、副作用のないテストを並行して実行しながら、副作用のあるテストを順番に実行するように指示することで、これを回避できることを願っています。出来ますか?

4

3 に答える 3

44

SBTを使用していると思いますか?その場合は、ドキュメントを確認してください:http ://www.scala-sbt.org/release/docs/Detailed-Topics/Parallel-Execution

関連するSBT設定はparallelExecutionです。これをプロジェクト定義に追加します。

parallelExecution in Test := false
于 2013-02-28T21:38:33.493 に答える
40

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がコメントで正しく言及されているように、これによりテストが単一の仕様で順次実行されるようになります!他の仕様は引き続き並行して実行される場合があります。

于 2014-04-19T13:56:25.900 に答える
7

一方、より良い解決策があります(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 )
)

これを各サブプロジェクトでオーバーライドできるかどうかはテストしていません。そのため、サブプロジェクトはテストを並行して実行できます。

于 2016-11-04T11:35:11.777 に答える