org.scalatest:全局设置(如beforeAllSuites?)

Mar*_*ier 10 installation sbt scalatest

我有一个使用org.scalatest进行一些测试的scala应用程序.这些测试需要一些全局设置(和拆解),以便管理测试数据库.

请不要告诉我我的测试不应该打到数据库,我应该使用Java-DAO-Stub-WTF-Overkill-Way™:-).

我正在使用SBT运行测试,这提供了一种在测试之前和之后执行代码的方法:

    testOptions in Test += Tests.Setup( () => println("Setup") )

    testOptions in Test += Tests.Cleanup( () => println("Cleanup") )
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法访问那里的课程.不出所料,将它们导入build.sbt也不起作用.

有任何想法吗?

Mat*_*ell 4

您可以根据您的需要使用BeforeAndAfterAllBeforeAndAfter特征。

之前和之后:

可以混合到需要在执行套件之前和之后调用方法的套件中的特征。此特征允许在运行套件的所有测试和嵌套套件之前和/或之后执行代码。

因此,在这种情况下,您将定义一个 MasterSuite,其中包含所有其他套件/测试,从而扩展了此特征。

之前和之后:

可以混合到需要在运行每个测试之前和之后执行代码的套件中的特征。此特性促进了一种测试风格,其中实例变量中保存的可变固定对象在每次测试或套件之前被替换或重新初始化。

  • 定义 MasterSuite 意味着我的所有测试都需要在一个文件中定义,对吧?目前,我已将所有依赖于数据库的测试分成一个套件,并在那里使用 BeforeAndAfterAll。这还有一个好处是我可以轻松跳过这些缓慢的测试。 (3认同)
  • 多年后,但仍然与任何发现这个问题的人相关:您不需要在单个文件中定义所有测试,ScalaTest 具有组合功能,您可以使用“class MasterSuite extends Suites(new OneSpec, new TwoSpec)”,因此组合套件只需位于类路径上(`BeforeAndAfterAll` Scaladoc 有一个这样的示例,因此很容易回忆)。由于 2.0 ScalaTest 具有“@DoNotDiscover”注释,因此您可以阻止 SBT(或任何支持运行程序)运行所有组合套件,仅运行主套件。 (3认同)