我有一个带有一堆测试的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
的许多组合,但无法弄清楚如何取消忽略集成测试。
答案 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
来运行它们。