如何默认禁用 "Slow" 标记的 Scalatests,允许使用选项执行?

How to disable "Slow" tagged Scalatests by default, allow execution with option?

我想默认禁用某些标记为 "Slow" 的自动化测试,但允许用户使用简单的命令行启用它们的执行。我想这是一个非常常见的用例。

鉴于此测试套件:

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")

然后我得到了我想要的默认行为,其中未标记测试 运行 而慢速标记测试不会 运行。

但是,当我想 运行 时,我想不出一个命令行选项来 运行 慢速测试。我做了几次搜索并尝试了几个例子。我有点惊讶,因为这似乎是一个非常常见的场景。

我有一个类似的问题:我想要 默认情况下禁用的测试 ,但是 运行 在 发布过程中 [=30] =].我通过在不同的范围内创建 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 时,它将 运行 慢速测试。