使用 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 中按顺序运行测试套件?