2013-04-03 5 views
10

(何らかの理由で)1つのVM内で1回しか使用できないクラスで作業しています。 sbtの設定で個別にテストを実行すると、テストケースが機能します(fork := true)。sbtで各テストのjvmをforkする方法

これらのテストを複数実行すると、タスクが拒否されたスレッドエグゼキュータで例外が発生して失敗します(終了する可能性が高いです)。問題の原因を突き止めるのは非常に時間がかかるでしょうし、問題が見つかったとしても解決できないかもしれません(私はソースコードにアクセスできない)。

私は現在specs2のテストフレームワークを使用していますが、sbtを使用しているテストフレームワークはすべて使用できます。

sbtのテストフレームワークは、jvmフォークで各テストを実行できますか?

考えられる他の解決策に関する考えや考え方はもちろん歓迎です。

答えて

7

これはかなり簡単です。ドキュメントは十分であり、非非推奨の構文を使用してTesting - Forking tests

// Define a method to group tests, in my case a single test per group 
def singleTests(tests: Seq[TestDefinition]) = 
    tests map { test => 
    new Group(
     name = test.name, 
     tests = Seq(test), 
     runPolicy = SubProcess(javaOptions = Seq.empty[String])) 
    } 

// Add the following to the `Project` settings 
testGrouping in Test <<= definedTests in Test map singleTests 
+0

?私は0.13.1を使用しており、私は運がない。私は、play2アプリを実行していて、各VM実行(各テスト)の設定データで初期化したいいくつかのコンパニオンオブジェクトを持っていますが、この解決策では間違いなく実行しています。ありがとう! – Jordan

+0

私はsbt 0.12だと思いますが、リンクは新しいバージョンを指しています。 – EECOLOR

+2

ああ、私のバージョンのsbtのように、あなたは 'Test ... ....でtestGroupingする必要があります' – Jordan

1

で見つけることができます:

testGrouping in Test := (definedTests in Test).value map { test => 
    Tests.Group(name = test.name, tests = Seq(test), runPolicy = Tests.SubProcess(
    ForkOptions(
     javaHome.value, 
     outputStrategy.value, 
     Nil, 
     Some(baseDirectory.value), 
     javaOptions.value, 
     connectInput.value, 
     envVars.value 
    ))) 
} 
にこの作業を行うのsbtのバージョン
関連する問題