如何在Scalatest中为多个套件运行BeforeAll和AfterAll

时间:2017-02-27 06:06:37

标签: scala functional-testing scalatest

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

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

现在我知道我可以在套件和每个测试用例之前和之后运行我的设置部分,但有一种方法可以在所有测试套件之前和之后运行我的设置 < / p>

1 个答案:

答案 0 :(得分: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的实现者将能够轻松访问大量内容,但在幕后只有一个特定对象的实例。我过去使用过这种技术非常成功,其中单例和特征用于提供“假”继承,但实际上你引用的是各种对象的相同实例。