加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

每次测试后调用ScalaTest afterAll()

发布时间:2020-12-16 18:12:29 所属栏目:安全 来源:网络整理
导读:TLDR;在同时在BeforeAndAfterAll和ParallelTestExecution中混合的 ScalaTest规范中,在每次测试之后调用afterAll(),然后在所有测试之后再次调用.我只想要毕竟的行为. 我有一个像这样的ScalaTest规范: class TestSpec extends fixture.FunSpec with ShouldMat
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以获取更多详细信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读