Scala 在没有匹配器的情况下,如何跳过specs2中的测试?
我正在用scala中的specs2测试一些依赖于db的东西。目标是测试“db running”,然后执行测试。我发现如果数据库关闭,我可以使用Matcher类中的orSkip 问题是,我得到的是一个匹配条件的输出(已传递),而示例被标记为跳过。我想要的是:如果测试数据库脱机,只执行一个标记为“跳过”的测试。这是我的“测试工具包”的代码 下面是我的规范代码:Scala 在没有匹配器的情况下,如何跳过specs2中的测试?,scala,skip,specs2,Scala,Skip,Specs2,我正在用scala中的specs2测试一些依赖于db的东西。目标是测试“db running”,然后执行测试。我发现如果数据库关闭,我可以使用Matcher类中的orSkip 问题是,我得到的是一个匹配条件的输出(已传递),而示例被标记为跳过。我想要的是:如果测试数据库脱机,只执行一个标记为“跳过”的测试。这是我的“测试工具包”的代码 下面是我的规范代码: package net.mycode import org.specs2.mutable._ import net.mycode.test
package net.mycode
import org.specs2.mutable._
import net.mycode.testkit.{TestKit}
import org.junit.runner.RunWith
import org.specs2.runner.JUnitRunner
@RunWith(classOf[JUnitRunner])
class MyClassSpec extends SpecificationWithJUnit with TestKit with Logging {
"MyClass" should {
"do something" in {
val sut = new MyClass()
sut.doIt must_== "OK"
}
"do something with db" in {
checkDbIsRunning
// Check only if db is running, SKIP id not
}
}
现在开始:
Test MyClass should::do something(net.mycode.MyClassSpec) PASSED
Test MyClass should::do something with db(net.mycode.MyClassSpec) SKIPPED
Test MyClass should::do something with db(net.mycode.MyClassSpec) PASSED
我希望它的输出是:
Test MyClass should::do something(net.mycode.MyClassSpec) PASSED
Test MyClass should::do something with db(net.mycode.MyClassSpec) SKIPPED
您是否尝试过使用
args(skipAll=true)
参数?见a
不幸的是(据我所知),您不能跳过单元规范中的一个示例。但是,您可以像这样使用此参数跳过规范结构,因此您可能必须创建单独的规范:
class MyClassSpec extends SpecificationWithJUnit {
args(skipAll = false)
"MyClass" should {
"do something" in {
success
}
"do something with db" in {
success
}
}
}
我想你可以用一个简单的条件来做你想做的事:
class MyClassSpec extends SpecificationWithJUnit with TestKit with Logging {
"MyClass" should {
"do something" in {
val sut = new MyClass()
sut.doIt must_== "OK"
}
if (DB.isRunning) {
// add examples here
"do something with db" in { ok }
} else skipped("db is not running")
}
}
解决此问题的新功能 顺便说一句,从WithJUnit继承时不需要@RunWith。没错,修复了这个问题。顺便说一句,我正在研究,希望我们能够在夏天结束时运行它,而不需要任何注释:-)有一个专用的快捷方式,如果满足条件,可以跳过所有示例。此方法较短,如果您的布尔表达式碰巧抛出异常,将捕获异常。感谢您的澄清,@Eric@Eric Skipall如果不再存在,它看起来可以请您举例说明当前的控制台输出是什么,以及需要的输出是什么?添加了输出示例它一点也不完美,但非常有用;)@Eric在运行test.functionality.Login:org.specs2.execute.SkipException时引发异常-未捕获异常。有没有一种方法不会引发异常?我认为跳过的
中的“db未运行”应该可以工作。而且,为了100%的安全,它不必使用JUnit扩展规范-例如,它是主要规范2标准结果的一部分非常棒,用于共享的thhx
class MyClassSpec extends SpecificationWithJUnit with TestKit with Logging {
"MyClass" should {
"do something" in {
val sut = new MyClass()
sut.doIt must_== "OK"
}
if (DB.isRunning) {
// add examples here
"do something with db" in { ok }
} else skipped("db is not running")
}
}