2017-12-01 6 views
2

私は、また成長するテストスイートのグループを持っていますので、一度だけ実行する必要があるtestcleanupタスクを実行する必要がありますすべてのテストが終了し、テストプロセスが終了する直前です。これは.NET AssebmlyCleanupに似ていますが、カスタムコードを実行することなくScala/Scalatestの世界で同等のものを見つけることができませんでしたか?すべてのスイートのすべてのテストの直後に1回だけ実行できるscalaTestメソッドまたは属性がありますか?

おかげ

答えて

4

私はこれにアプローチする方法を考えてきたし、これを行うための一つの方法は、私たちのbuild.sbtにビットtesttestOnlyをオーバーライドすることです。今度は、/project/フォルダの下に、当社のクリーンアップが生きるCleanUp.scalaオブジェクトを追加してみましょう

class Suite1 extends FlatSpec{ 
    "Test1 in Suite1" should "succeed" in{ 
    succeed 
    } 
} 

class Suite2 extends FlatSpec{ 
    "Test1 in Suite2" should "succeed" in{ 
    succeed 
    } 
} 

object CleanUp{ 
    def cleanUp:Unit = println("Cleaning up after all suites are completed.") 
} 

だこと だから我々はsrc/test/scala以下の2つのスイートの下にあるとし最小の例ですが、実際には、必要な複雑なクリーンアップがあればそこにいるかもしれません。 は今私達のbuild.sbtでのは、次の内容を追加してみましょう:

(test in Test) := { 
    val testsResult = (test in Test).value 
    CleanUp.cleanUp 
    testsResult 
} 

(testOnly in Test) := { 
    (testOnly in Test).evaluated 
    CleanUp.cleanUp 
} 

すべてのスイート(またはユーザー・スイートで指定されたすべて)が実行された後、クリーンアップが適用されますので、これはtesttestOnlyタスクのデフォルトの動作を上書きします。

はたとえば、ここに新しいtestOnlyの私のsbtコンソールチェックです:

[IJ]sbt:AfterAllTests> testOnly Suite1 
[info] Suite1: 
[info] Test1 in Suite1 
[info] - should succeed 
[info] Run completed in 150 milliseconds. 
[info] Total number of tests run: 1 
[info] Suites: completed 1, aborted 0 
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0 
[info] All tests passed. 
Cleaning up after all suites are completed. 
[success] Total time: 0 s, completed Dec 2, 2017 12:19:48 AM 
[IJ]sbt:AfterAllTests> 

そして、ここで新しいtestのチェックです:クリーンアップが呼び出されます、あなたが見ることができるように

[IJ]sbt:AfterAllTests> test 
[info] Suite2: 
[info] Test1 in Suite2 
[info] - should succeed 
[info] Suite1: 
[info] Test1 in Suite1 
[info] - should succeed 
[info] Run completed in 164 milliseconds. 
[info] Total number of tests run: 2 
[info] Suites: completed 2, aborted 0 
[info] Tests: succeeded 2, failed 0, canceled 0, ignored 0, pending 0 
[info] All tests passed. 
Cleaning up after all suites are completed. 
[success] Total time: 2 s, completed Dec 2, 2017 12:28:25 AM 
[IJ]sbt:AfterAllTests> 

。 これが役立つことを願っています。

関連する問題