SBT测试 - 忽略排除并运行一切

时间:2017-03-30 15:48:17

标签: scala sbt scalatest

我有一个带有一堆测试的Play框架(使用ScalaTest运行),我试图通过以下方式组织它们:

  • 单元测试
  • 集成测试阅读
  • 集成测试写入

我已将所有单元测试保留为未标记,并创建了以下标记:

/* TestTags.scala */

object IntegrationReadTest extends Tag("IntegrationReadTest")
object IntegrationWriteTest extends Tag("IntegrationWriteTest")

这样我就可以像这样标记我的集成测试:

/* SomeSpecs.scala */

"foo" taggedAs IntegrationReadTest in {
  // External APIs are read from
}

"bar" taggedAs IntegrationWriteTest in {
  // External APIs are written to
}

在我开发和运行测试的大部分时间里,我想要运行集成测试,因此我在运行{{1}时修改了build.sbt以忽略它们}}:

sbt test

这一切都运行良好,但我无法想象如何运行所有测试(包括集成测试)。我尝试了/* build.sbt */ testOptions in Test += Tests.Argument("-l", "IntegrationReadTest") testOptions in Test += Tests.Argument("-l", "IntegrationWriteTest") sbt test的许多组合,但无法弄清楚如何取消忽略集成测试。

1 个答案:

答案 0 :(得分:1)

默认情况下,您的测试在Test上下文中运行。这意味着sbt test确实在做sbt test:test。由于您要设置testOptions in Test,因此默认情况下适用。

由此可见,您可以创建一个新的上下文All,它将这些测试重新放入。

/* build.sbt */

lazy val All = config("all") extend(Test) describedAs("run all the tests")
configs(All)
inConfig(All)(Defaults.testSettings)

testOptions in All -= Tests.Argument("-l", "IntegrationReadTest")
testOptions in All -= Tests.Argument("-l", "IntegrationWriteTest")

然后你可以运行sbt all:test来运行它们。