是否有一个scalaTest方法或属性可以在所有套件中的所有测试之后仅运行一次

Ala*_*seh 3 automated-tests scala scalatest

我有一组也会增长的测试套件,我需要运行一个testcleanup任务,该任务仅在所有测试完成执行之后并且在测试过程退出之前才运行一次。这类似于.NET AssebmlyCleanup,但是我无需执行自定义代码就无法在Scala / Scalatest世界中找到等效的东西?

谢谢

Ale*_*dar 5

我一直在思考如何处理这个和一个做到这一点的方法是重写了一下test,并testOnly在我们的build.sbt。因此,假设我们有src/test/scala以下两个套件:

class Suite1 extends FlatSpec{
  "Test1 in Suite1" should "succeed" in{
    succeed
  }
}
Run Code Online (Sandbox Code Playgroud)

class Suite2 extends FlatSpec{
  "Test1 in Suite2" should "succeed" in{
    succeed
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,让我们在/project/文件夹下添加一个CleanUp.scala将用于清理的对象:

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

这是一个最小的示例,实际上,您可能需要进行任何复杂的清理。现在在我们中build.sbt添加以下内容:

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

(testOnly in Test) := {
  (testOnly in Test).evaluated
  CleanUp.cleanUp
}
Run Code Online (Sandbox Code Playgroud)

这会覆盖testtestOnly任务的默认行为,因此将在执行所有套件(或所有由用户套件指定的套件)后应用清理。

例如,这是我对新版本的sbt控制台检查testOnly

[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> 
Run Code Online (Sandbox Code Playgroud)

这是新的检查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> 
Run Code Online (Sandbox Code Playgroud)

如您所见,清理被调用。希望这可以帮助。