如何在ScalaTest中禁用测试套件

时间:2012-07-17 04:30:14

标签: scala testing scalatest

如何禁用测试套件,即扩展FunSpec的类中的所有测试?

我发现的唯一解决方案是在每次测试前用it替换ignore,但是通过几十次测试这样做很无聊。

6 个答案:

答案 0 :(得分:31)

在1.8中执行此操作的简单方法是添加一个带有伪参数的构造函数。如果没有public,no-arg构造函数,ScalaTest(和sbt)将不会发现该类:

class MySuite(ignore: String) extends FunSuite { 
  // ...
}

在2.0中你可以在课堂上写@Ignore:

@Ignore
class MySuite extends FunSuite {
  // ...
}

答案 1 :(得分:5)

您可以将@Ignore用于不同的测试和整个诉讼。

答案 2 :(得分:2)

Tag麻烦的测试,然后根据标记进行exclude or include测试。

标记是一次性的努力。

答案 3 :(得分:2)

标签是一种选择,但您需要相应地标记每个测试,您不能以这种方式排除完整的套装。但是,正如user272735所提到的,标记测试是一次性的努力。

另一个选择是定义主套件并将nestedSuites列表限制为您要运行的套件(see the docs)。明显的缺点是,您必须维护主测试套件,即向其添加新创建的测试套件。您可以通过递归文件夹,创建可以找到的所有测试套件的列表,并减去放入黑名单的那些套装来避免这种情况。此外,通过文件夹递归已经为您提供了过滤掉符合(外部)给定标准的文件的机会。

第三个选项 - 尽管更为苛刻 - 是更改要列入黑名单的套件所属的包。然后,您可以使用测试运行器仅运行某些包中包含的套装。请阅读文档中的更多内容,"Specifying 'members-only' and 'wildcard' Suite paths"部分。

答案 4 :(得分:0)

使用 @DoNotDiscover

来自scaladoc

import org.scalatest._

@DoNotDiscover
class SetSpec extends FlatSpec {

  "An empty Set" should "have size 0" in {
    assert(Set.empty.size === 0)
  }

  it should "produce NoSuchElementException when head is invoked" in {
    intercept[NoSuchElementException] {
      Set.empty.head
    }
  }
}

答案 5 :(得分:0)

对于每个scalatest文档,说一下您是否有这样的测试套件

describe ("some  component") {
  it ("should do something") {
   ...
  }
  it ("should also do something else") {
   ...
  }
}

要仅禁用单个测试,可以使用ignore()方法。

describe ("some  component") {
  ignore ("should do something") {
   ...
  }
  ...
}