【问题标题】:How to run BeforeAll and AfterAll for multiple suites in Scalatest如何在 Scalatest 中为多个套件运行 BeforeAll 和 AfterAll
【发布时间】:2017-03-02 20:32:45
【问题描述】:

我的测试场景是我有以下层次结构:

AfterAll
  AfterAll
    Test Suite for Component 1 with multiple test cases
  BeforeAll
  AfterAll
    Test Suite for Component 2 with multiple test cases
  BeforeAll
  AfterAll
    Test Suite for Component 2 with multiple test cases
  BeforeAll
BeforeAll

现在我有一个想法,我可以在套件和每个测试用例之前和之后运行我的设置部分,但是有没有一种方法可以在所有测试套件之前和之后运行我的设置

【问题讨论】:

  • 您是说要为组件 1 和组件 2 分别设置 beforeAllafterAll 吗??
  • 不,我希望所有这些组件的 beforeAll 和 afterAll 都相同,而且我还将拥有单独的 beforeAll 和 afterAll,我知道如何放置后者。
  • 好的,所以你想要共同的 beforeAllafterAll 以及它们各自的 beforeAllafterAll。我猜你会在 2 个不同的测试文件中编写 2 个组件,对吗?
  • 是的,你没看错。这就是我正在寻找的,因为我可以为不同的组件提供不同的场景

标签: scala functional-testing scalatest


【解决方案1】:

您可以利用继承在各种套件中复制设置,这有点手动,但这是一种非常常见的方法。

trait DefaultSuite extends Suite with BeforeAndAfterAll with Informing {
  override def beforeAll(): Unit = {..}
  override def afterAll(): Unit = {..}
}


class Component1Tests extends FlatSpec with DefaultSuite {}
class Component2Tests extends FlatSpec with DefaultSuite {}
class Component3Tests extends FlatSpec with DefaultSuite {}

如果你想要的东西只运行一次,之前和之后,你需要变得更聪明一点。在某些情况下,使用 SBT 插件或任务来处理最高级的场景,在其他情况下,您可以执行以下操作:

object Singleton {
  val dbConnection = DB(..)
}

trait DefaultSuite extends Suite with BeforeAndAfterAll with Informing {
  def dbConnection: DB = Singleton.dbConnection
}

因此,DefaultSuite 的实现者将能够轻松访问一堆东西,但在幕后只有一个特定对象的实例。我在过去非常成功地使用了这种技术,其中使用单例和特征来提供“假”继承,但实际上您引用的是各种对象的同一个实例。

【讨论】:

  • 不确定我是否完全理解你,在第一部分中,你建议并且常见 beforeAll 和 AfterAll 。在第二部分中,您向我展示了我只想为整个套件执行一次的任务,我应该使用来自 Scala 的对象。是这样的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 2014-03-10
  • 2019-09-09
  • 1970-01-01
  • 2020-06-04
  • 2018-03-04
  • 2022-12-09
相关资源
最近更新 更多