如何标记一些 ScalaTest,以便它们仅在显式调用时执行

Bob*_*har 5 scala sbt scalatest

我是 SBT 和 scalatest 的新手,但想知道如何让我的一些org.scalatest._测试仅“按需”执行。

在 SBT 中,我可以调用所有单元测试(例如)sbt:Sprout> test,或所有集成测试(例如)sbt:Sprout> it:test。我需要一种注释测试的方法,允许调用sbt:Sprout test跳过它们,但使用其他一些调用仅执行这些测试。Scalatest 文档谈到了一些sbt:Sprout> test-only *RedSuite调用来允许我对我的测试进行“分类”,但不清楚如何利用它,这样它们就不会作为单元测试运行。 org.scalatest.Tag仅 s 并不能摆脱当 时执行的“默认” sbt:Sprout> test。除非明确调用,否则我需要这些ignored

通过 SBT 在 ScalaTest 中可以实现此用例吗?

Gal*_*aor 4

您可以指定要在运行中包含或排除的测试的标签名称。要指定要包含的标签,请使用 -n 后跟要包含的标签名称列表。同样,要指定要排除的标签,请使用 -l 后跟要排除的标签名称列表

(请在此处查看官方文档中的更多信息)。

例如:

package com.test

import org.scalatest.FlatSpec
import org.scalatest.Tag

object IncludeTest extends Tag("com.tags.Include")
object ExcludeTest extends Tag("com.tags.Exclude")

class TestSuite extends FlatSpec {

 "Test1" taggedAs(IncludeTest) in {
   val sum = 1 + 1
   assert(sum === 2)
  }

 "Test2" taggedAs(ExcludeTest) in {
   val minus = 2 - 1
   assert(minus === 1)
 }
}
Run Code Online (Sandbox Code Playgroud)

要包含IncludeTest和排除ExcludeTest标签,您应该执行以下操作:

test-only org.* -- -n com.tags.Include -l com.tags.Exclude
Run Code Online (Sandbox Code Playgroud)