每次测试后调用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以获取更多详细信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |