ScalaTest afterAll() 在每次测试后被调用

标签 scala scalatest

TLDR;在混合了 BeforeAndAfterAll 的 ScalaTest 规范中和 ParallelTestExecution , afterAll()在每次测试后都被调用,然后在所有测试之后再次调用。我只想要毕竟的行为。

我有一个像这样的 ScalaTest 规范:

class TestSpec extends fixture.FunSpec with ShouldMatchers with BeforeAndAfter with BeforeAndAfterAll with ParallelTestExecution {
   override def afterAll() = {
      println("afterAll")
   }

   describe("something") {
      it("should foo") {
         println("foo")
      }

      it("should bar") {
         println("bar")
      }
   }
}

两个测试想共享一个fixture,然后afterAll()应该清理夹具。我已经省略了夹具代码的细节,因为这个问题并不重要。

这是我的测试的输出:
foo
afterAll
bar
afterAll
afterAll

所以afterAll()在每次测试后都被调用,然后在所有测试之后再次调用。我只想在所有测试后调用它。

有谁知道为什么afterAll()是这样的吗?

更新

如果我不混进去 ParallelTestExecution ,我的测试行为正常:
foo
bar
afterAll

不幸的是,我实际上想要 ParallelTestExecution .有什么办法可以让我的蛋糕也吃掉吗?

最佳答案

来自马口:https://stackoverflow.com/a/15731847/89509

基本上每个测试用例都会作为它自己的实例运行,每个实例都会调用 afterAll一次。

关于ScalaTest afterAll() 在每次测试后被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21133201/

相关文章:

scala - 在 intellij idea 中运行单个特定的 scalatest

Scala 测试 : Replace function implementation

testing - 在测试更改或测试类更改后自动运行 Scala 测试

scala - 如何跳过 FlatSpec 中的测试?

ScalaCheck 有效/无效的测试边界

scala - 如何在单线程中运行 ScalaTest 套件?

scala - 使用集合来保留类型信息

scala - 将新的 Iterable{} 代码从 Scala 2.7.7 移植到 2.8

scala - 在 Scala 中添加泛型类型参数

scala - 所有子类型的隐式处理器