【问题标题】:How to disable "Slow" tagged Scalatests by default, allow execution with option?如何默认禁用“慢”标记的 Scalatests,允许使用选项执行?
【发布时间】:2017-05-04 21:50:08
【问题描述】:

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

鉴于此测试套件:

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

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

但是,当我想运行慢速测试时,我想不出一个命令行选项。我已经进行了几次搜索并尝试了几个示例。我有点惊讶,因为这似乎是一种非常常见的情况。

【问题讨论】:

  • 你检查this article了吗?
  • @evan058,是的,这有效,但它保留了运行所有内容的默认行为。我希望默认排除慢速测试。
  • 你试过testOnly org.myorg.* -- -n org.scalatest.tags.Slow吗?来自this page,“使用标签包含和排除测试”部分。

标签: scala unit-testing sbt scalatest


【解决方案1】:

我有一个类似的问题:我希望测试在默认禁用,但在发布过程中运行。我通过创建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 时,它将运行慢速测试。

【讨论】:

  • 注意:lazy val Slow 进入顶层,用于多项目构建,而 configsinConfig 是每个项目的。另请参阅scala-sbt.org/1.x/docs/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
相关资源
最近更新 更多