如何只使用flatspec通过sbt在scala中运行没有某个​​标签的测试?

k0p*_*kus 2 unit-testing scala sbt scalatest

作为一个scala初学者,我想标记集成测试,以便在某些情况下排除它们的运行(因为它们可能非常慢并且可能因外部更改/问题而中断).

我这样创建了标签integration:

import org.scalatest.{FlatSpec, Matchers, Tag}
object integration extends Tag("com.dreamlines.tags.integration")
Run Code Online (Sandbox Code Playgroud)

在我的测试中,我标记了一个测试:

class SchemaValidation extends FlatSpec with Matchers {
  it should "return valid json" taggedAs (integration) in {
    ...
    assertSchema(response, endpointSchema)
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,在阅读如何基于文档中的标记过滤某些测试时,我感到非常困惑,因为突然我读到我应该使用 org.scalatest.tools.Runner

scala [-cp scalatest-<version>.jar:...] org.scalatest.tools.Runner [arguments]
Run Code Online (Sandbox Code Playgroud)

哪个有我正在寻找的旗帜:

-l指定要排除的标记(注意:每个-l只允许一个标记名称)-l SlowTests -l PerfTests

然而,我只习惯通过以下方式运行我的测试:

sbt test
Run Code Online (Sandbox Code Playgroud)

我不知道这里的scala测试运行器指的是什么,或者当我运行时引擎盖下发生了什么sbt test.我真的迷路了.

我期待执行测试并不完全不同于:

sbt test --ignore-tag integration
Run Code Online (Sandbox Code Playgroud)

Gáb*_*kos 6

根据有关测试选项sbt文档,以下内容适合您:

testOnly -- -l integration
Run Code Online (Sandbox Code Playgroud)

或者,如果ScalaTest使用完全限定的标记ID:

testOnly -- -l com.dreamlines.tags.integration
Run Code Online (Sandbox Code Playgroud)

如果您想在默认情况下执行此操作,则可以testOptionsbuild.sbt文件中进行调整.

编辑:

您可能会考虑采用不同的集成测试方法.您可能希望将它们放在src/it/{scala|resources}文件夹中,而不是标记它们.