cla*_*lay 12 unit-testing scala 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)
}
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,sbt test将运行标记和未标记的测试.
如果我将以下内容添加到build.sbt:
testOptions in Test += Tests.Argument("-l", "org.scalatest.tags.Slow")
Run Code Online (Sandbox Code Playgroud)
然后,我得到了我想要的默认行为,其中未标记的测试运行,并且慢速标记的测试将不会运行.
但是,当我想运行它们时,我无法弄清楚将运行慢速测试的命令行选项.我做了几次搜索并尝试了几个例子.我有点惊讶,因为这似乎是一种非常常见的情况.
我有一个类似的问题:我希望默认情况下禁用测试,但在发布过程中运行.我通过创建自定义测试配置并testOptions在不同范围设置来解决它.因此,根据您的情况调整此解决方案,它应该是这些内容(在您的build.sbt)中:
lazy val Slow = config("slow").extend(Test)
configs(Slow)
inConfig(Slow)(Defaults.testTasks)
Run Code Online (Sandbox Code Playgroud)
现在默认排除慢速测试:
testOptions in Test += Tests.Argument("-l", "org.scalatest.tags.Slow")
Run Code Online (Sandbox Code Playgroud)
但是在Slow范围内不要排除它们并仅运行它们:
testOptions in Slow -= Tests.Argument("-l", "org.scalatest.tags.Slow")
testOptions in Slow += Tests.Argument("-n", "org.scalatest.tags.Slow")
Run Code Online (Sandbox Code Playgroud)
现在,当你test在sbt中运行时,它将运行除慢速测试之外的所有内容,当你运行slow:test它时,它将只运行慢速测试.
| 归档时间: |
|
| 查看次数: |
687 次 |
| 最近记录: |