每次测试后调用ScalaTest afterAll()

TLDR;在同时在BeforeAndAfterall和ParallelTestExecution中混合的 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")
      }
   }
}

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

这是我测试的输出

foo
afterall
bar
afterall
afterall

因此,然后在所有测试之后再次调用.我只想在所有测试后调用它.

有谁知道为什么afterall()表现得像这样?

更新

如果我不混合使用ParallelTestExecution,我的测试表现正常:

foo
bar
afterall

不幸的是,我实际上想要ParallelTestExecution.有没有办法让我的蛋糕也吃掉它?

解决方法

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

但是,您可以使用嵌套套件解决此问题(为了获得一个beforeAll和一个afterall全部执行),请参阅此question获取更多详细信息.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...