微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

每次测试后调用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获取更多详细信息.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐