【问题标题】:ScalaTest afterAll() being called after each testScalaTest afterAll() 在每次测试后被调用
【发布时间】:2014-02-03 16:08:53
【问题描述】:

TLDR;在混合了BeforeAndAfterAllParallelTestExecution 的ScalaTest 规范中,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()应该清理fixture。我省略了对这个问题无关紧要的夹具代码的细节。

这是我的测试的输出:

foo
afterAll
bar
afterAll
afterAll

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

有人知道为什么afterAll() 会这样吗?

更新

如果我不混入ParallelTestExecution,我的测试会正常运行:

foo
bar
afterAll

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

【问题讨论】:

    标签: scala scalatest


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这是一种正常行为,因为为了降低并发冲突和错误的风险,ParallelTestExecution 在其自己的 Test 类实例中运行每个测试。您的每个测试都将作为TestSpec 的单独实例运行,这将导致beforeAllafterAll 为每个实例执行。

      但是,您可以使用嵌套套件解决此问题(以便为所有人执行一个beforeAll 和一个afterAll),请参阅此question 了解更多详细信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-05
        • 2015-11-27
        • 2017-05-28
        • 2016-10-03
        相关资源
        最近更新 更多