有没有办法从Specs 2 Specification
运行特定测试?例如如果我有以下内容:
class FooSpec extends Specification {
"foo" should {
"bar" in {
// ...
}
"baz" in {
// ...
}
}
}
我想有办法只运行FooSpec > "foo" > "bar"
(在这里使用一些任意表示法)。
答案 0 :(得分:5)
您可以使用sbt中的ex
参数来运行特定示例:
sbt> test-only *FooSpec* -- ex bar
您还可以混合使用org.specs2.mutable.Tags
特征并添加特定标记:
sbt> test-only *FooSpec* -- include investigate
class FooSpec extends Specification with Tags {
"foo" should {
tag("investigate")
"bar" in {
// ...
}
"baz" in {
// ...
}
}
}
您也可以重新运行以前失败的示例,无论它们是什么
sbt> test-only *FooSpec* -- was x
最后,在下一个2.0版本中(或使用最新的1.15-SNAPSHOT),您将能够创建script.Specification
并使用“自动编号的示例组”:
import specification._
/**
* This kind of specification has a strict separation between the text
* and the example code
*/
class FooSpec extends script.Specification with Groups { def is = s2"""
This is a specification for FOO
First of all, it must do foo
+ with bar
+ with baz
"""
"foo" - new group {
eg := "bar" must beOk
eg := "baz" must beOk
}
}
// execute all the examples in the first group
sbt> test-only *FooSpec* -- include g1
// execute the first example in the first group
sbt> test-only *FooSpec* -- include g1.e1
但是,无法使用可变规范指定您要运行示例"foo" / "bar"
。这可能是将来添加的功能。
答案 1 :(得分:1)
您可以选择要执行的测试的命名空间,但是AFAIK无法从sbt console
运行特定的测试。你可以这样做:
sbt test:compile "test-only FooSpec.*"
,它仅从FooSpec
命名空间运行测试,但此选择是基于命名空间的,甚至不能正常工作。这是选择机制,但它以某种方式失败并始终运行在项目中找到的整套测试。
<强>更新强>
test-only
仅测试任务接受要运行的以空格分隔的测试名称列表。例如:
test-only org.example.MyTest1 org.example.MyTest2
它也支持通配符:
test-only org.example.*Slow org.example.MyTest1