我想禁用标记为"慢速"的某些自动化测试。默认情况下允许用户使用简单的命令行启用它们的执行。我想这是一个非常常见的用例。
鉴于此测试套件:
import org.scalatest.FunSuite
import org.scalatest.tagobjects.Slow
class DemoTestSuite extends FunSuite {
test("demo test tagged as slow", Slow) {
assert(1 + 1 === 2)
}
test("demo untagged test") {
assert(1 + 1 === 2)
}
}
默认情况下,sbt test
将同时运行已标记和未标记的测试。
如果我将以下内容添加到build.sbt:
testOptions in Test += Tests.Argument("-l", "org.scalatest.tags.Slow")
然后我得到了我想要的默认行为,其中未标记的测试运行,并且慢速标记的测试将不会运行。
但是,我无法找到一个命令行选项,当我想运行它们时,它会运行慢速测试。我做了几次搜索并尝试了几个例子。我有些惊讶,因为这似乎是一种非常常见的情况。
答案 0 :(得分:7)
我遇到了类似的问题:我希望默认禁用的测试,但要在发布过程中运行。我通过创建custom test configuration并在不同范围内设置testOptions
来解决这个问题。因此,根据您的案例调整此解决方案,应该是这些内容(在build.sbt
中):
lazy val Slow = config("slow").extend(Test)
configs(Slow)
inConfig(Slow)(Defaults.testTasks)
现在默认排除慢速测试:
testOptions in Test += Tests.Argument("-l", "org.scalatest.tags.Slow")
但在Slow
范围内,请勿排除它们并仅运行它们:
testOptions in Slow -= Tests.Argument("-l", "org.scalatest.tags.Slow")
testOptions in Slow += Tests.Argument("-n", "org.scalatest.tags.Slow")
现在,当您在sbt中运行test
时,它将运行除慢速测试之外的所有内容,当您运行slow:test
时,它将仅运行 慢速测试。