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

问题描述 投票:0回答:1

我有一个带有一堆测试的 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
}

大多数时候,当我开发和运行测试时,我不想想要运行集成测试,所以我修改了我的

build.sbt
以在运行时忽略它们
sbt test

/* build.sbt */

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

这一切都运行良好,但我无法弄清楚如何运行所有测试(包括集成测试)。我尝试了

sbt test
sbt "test:testOnly"
的多种组合,但不知道如何取消忽略集成测试。

scala sbt scalatest
1个回答
2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.