如何禁用"慢"默认情况下标记为Scalatests,允许执行选项吗?

时间:2016-12-19 19:12:32

标签: scala unit-testing sbt scalatest

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

鉴于此测试套件:

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

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

但是,我无法找到一个命令行选项,当我想运行它们时,它会运行慢速测试。我做了几次搜索并尝试了几个例子。我有些惊讶,因为这似乎是一种非常常见的情况。

1 个答案:

答案 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时,它将仅运行 慢速测试。