ScalaTest 中 BeforeAndAfter 和 BeforeAndAfterEach 有什么区别

Pet*_*erg 4 scala scalatest

查看文档,两者似乎非常相似(BeforeAndAfterEach BeforeAndAfter)。他们之间的核心区别是什么。在什么情况下应该使用其中一个而不是另一个(并且可能另一个甚至无法工作。)

Tom*_*tah 6

scalatest文档中您可以找到所需的所有信息。

TL;DR:两者具有相同的功能。BeforeAndAfter更简洁,同时BeforeAndAfterEach更可堆叠。

BeforeAndAfter推荐用法

BeforeAndAfter当您需要在测试之前和/或之后(而不是在测试开始或结束时)执行相同的副作用时,请使用特征。注意:要更深入地了解 Before 和 After 在整体情况中的位置,请参阅您所选风格特征文档中的共享灯具部分。

我应该使用BeforeAndAfter还是BeforeAndAfterEach?(BeforeAndAfter角度来看

尽管BeforeAndAfter提供了一种在测试之前和之后执行代码的最小样板方法,但它并不是为了启用可堆叠特征而设计的,因为执行顺序并不明显。如果您想提取多个测试套件共有的前后代码,则应该使用 Trait BeforeAndAfterEach

与 BeforeAndAfterEach 相比,该特性的优点是其语法更加简洁。主要缺点是它不可堆叠,而BeforeAndAfterEach可以。也就是说,您可以编写几个扩展BeforeAndAfterEach和提供 beforeEach 方法的特征,其中包括对 super.beforeEach 的调用,并将它们以各种组合混合在一起。相比之下,混合在 BeforeAndAfter 中的套件或规范中只允许调用一次 before 注册函数。此外,BeforeAndAfterEach允许您通过传递给 beforeEach 和 afterEach 方法的 TestData 来访问配置映射和测试名称,但BeforeAndAfter不允许您访问配置映射。

BeforeAndAfterEach推荐用法

BeforeAndAfterEach当您想要在测试之前和/或之后(而不是在测试开始或结束时)堆叠执行副作用的特征时,请使用特征。注意:要更深入地了解BeforeAndAfterEach总体情况,请参阅您所选风格特征文档中的共享灯具部分。

我应该使用BeforeAndAfter还是BeforeAndAfterEach?(BeforeAndAfterEach角度来看):

BeforeAndAfterEachover的主要优点BeforeAndAfterBeforeAndAfterEach. 启用特征堆叠。与 BeforeAndAfter 相比,主要缺点BeforeAndAfterEachBeforeAndAfterEach需要更多样板文件。如果您不需要特征堆叠,请使用BeforeAndAfter代替BeforeAndAfterEach。如果您想在 beforeEach 或 afterEach 方法中使用测试数据(测试名称、配置映射等),请改用 Trait BeforeAndAfterEachTestData

PS 我发现有一个常见的错误,即一个测试会执行而另一个不会执行。还有另一个特征叫做BeforeAndAfterAll