【发布时间】:2012-07-15 23:50:02
【问题描述】:
如何禁用测试套件,即类中的所有测试都扩展FunSpec?
我找到的唯一解决方案是在每个测试前将it 替换为ignore,但是在几十个测试中这样做很无聊。
【问题讨论】:
-
无论你做什么,don't comment it out :)
如何禁用测试套件,即类中的所有测试都扩展FunSpec?
我找到的唯一解决方案是在每个测试前将it 替换为ignore,但是在几十个测试中这样做很无聊。
【问题讨论】:
在 1.8 中执行此操作的简单方法是添加一个接受虚拟参数的构造函数。如果没有公共的、无参数的构造函数,ScalaTest(和 sbt)将不会发现该类:
class MySuite(ignore: String) extends FunSuite {
// ...
}
在 2.0 中,您将能够在类上写 @Ignore:
@Ignore
class MySuite extends FunSuite {
// ...
}
【讨论】:
您可以将@Ignore 用于不同的测试和整个套装。
【讨论】:
根据scalatest 文档,如果您有这样的测试套件,请说明
describe ("some component") {
it ("should do something") {
...
}
it ("should also do something else") {
...
}
}
要仅禁用一个测试,您可以使用ignore() 方法。
describe ("some component") {
ignore ("should do something") {
...
}
...
}
【讨论】:
Tag 麻烦的测试,然后exclude or include 基于标签的测试。
标记是一次性的工作。
【讨论】:
标签是一种选择,但您需要相应地标记每个测试,您不能以这种方式排除完整的套装。然而,正如 user272735 提到的,标记测试是一次性的。
另一个选项是定义一个主套件并将nestedSuites 列表限制为您想要运行的套件 (see the docs)。明显的缺点是,您必须维护主测试套件,即向其中添加新创建的测试套件。您可以通过递归浏览您的文件夹、创建所有可以找到的测试套件的列表并减去您放入黑名单的测试套件来避免这种情况。此外,通过您的文件夹递归已经让您有机会过滤掉与(外部)给定标准匹配的文件。
第三个选项 - 虽然更老套 - 是更改您想要列入黑名单的套件所属的包。然后,您可以使用测试运行器仅运行某些包中包含的套装。在文档中阅读更多内容,"Specifying 'members-only' and 'wildcard' Suite paths" 部分。
【讨论】:
使用@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
}
}
}
【讨论】: