使用 ScalaTest 时从 SBT 中排除特别标记的测试

Posted

技术标签:

【中文标题】使用 ScalaTest 时从 SBT 中排除特别标记的测试【英文标题】:Exclude Specifically Tagged tests from SBT when using ScalaTest 【发布时间】:2017-01-29 21:10:56 【问题描述】:

尝试从sbt- 运行我的所有测试同时排除特定标签时,我感到非常沮丧。这是我要运行的内容:

testOnly * -- -l "com.my.project.path.tags.ValidationTest"

我尝试了此命令的许多变体,包括将 * 替换为类的路径或包的路径,如下所示:

testOnly "com.my.project.path.somePackage" -- -l "com.my.project.path.tags.ValidationTest"

我已经尝试过在包裹周围加引号和不加引号。

我刚刚读到testOnly 用于新版本的sbt 而不是test-only。我已经尝试过这种语法(以及许多变体),但似乎没有任何效果。 我的测试设置如下:

"some method" should "fail when doing something" taggedAs ValidationTest in  ... 

我在TestTag.scala 中定义了object ValidationTest extends Tag("com.my.project.path.tags.ValidationTest")

当方法使用it 关键字而不是"some method" should "fail..." 定义时,我也尝试过此操作

Sbt with ScalaTest 在“包含和排除带有标签的测试”下显示以下内容

> test-only org.acme.* -- -n CheckinTests
> test-only org.acme.* -- -n FunctionalTests -l org.scalatest.tags.Slow
> test-only org.acme.* -- -n "CheckinTests FunctionalTests" -l "org.scalatest.tags.Slow org.scalatest.tags.Network"

【问题讨论】:

明确地说,您是否希望这些标签运行?听起来您不希望带有该标签的东西运行,我不相信 ScalaTest 支持。 ScalaTest 绝对确实 支持跳过这些标签,或者通过-n-l 标志包括它们。见这里:ScalaTest with Sbt。请参阅页面下方的 3/4。 我知道这是一篇旧帖子,但我试图重现您的问题,但无法重现。你还在遇到这个问题吗? 可能重复:Manually exclude some test classes in sbt 【参考方案1】:

只是几个猜测:

所有这些语法仅适用于 sbt 控制台,不适用于命令行; 包名应该不带引号并且应该以asterix结尾,标签应该带引号(例如testOnly com.my.project.* -- -l "com.my.project.path.tags.ValidationTest") testOnly 只涉及单元测试,如果你应该有集成测试,你应该使用例如it:testOnly * -- -l "path.to.Tag"

【讨论】:

我没有测试过这个——但是是的,我认为这与我没有使用 sbt 控制台有关——也没有使用引号 那么我怎样才能从命令行做任何相同的事情呢? 要尝试的一件事是将命令作为参数传递给 sbt 控制台,例如在批处理文件/shell脚本中。我还没有尝试过,不知道是否有可能。

以上是关于使用 ScalaTest 时从 SBT 中排除特别标记的测试的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 scalatest 运行 sbt 测试?我有一个错误:对象 scalatest 不是包 org 的成员

如何使用 SBT Jenkins 插件运行特定测试以进行 ScalaTest 测试

如何在 ScalaTest / SBT 中按顺序运行测试套件?

使用scalatest,sbt目录结构时出错

sbt 中的 ScalaTest:有没有办法在没有标签的情况下运行单个测试?

Sbt 无法解析 Intellij IDEA 上的 Scalatest