SBT 测试 - 忽略排除并运行所有内容



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

  • 单元测试
  • 集成测试读取
  • 集成测试编写

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

/* 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
}

大多数时候,当我开发和运行测试时,我不想运行集成测试,所以我修改了我的build.sbt,以便在运行时忽略它们sbt test

/* build.sbt */
testOptions in Test += Tests.Argument("-l", "IntegrationReadTest")
testOptions in Test += Tests.Argument("-l", "IntegrationWriteTest")

这一切都运行良好,但我无法弄清楚如何运行所有测试(包括集成测试(。 我已经尝试了许多sbt testsbt "test:testOnly"的组合,但无法弄清楚如何取消忽略集成测试。

默认情况下,测试在测试上下文中运行。 这意味着sbt测试确实在做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来运行它们。

最新更新