Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在没有匹配器的情况下,如何跳过specs2中的测试?_Scala_Skip_Specs2 - Fatal编程技术网

Scala 在没有匹配器的情况下,如何跳过specs2中的测试?

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

我正在用scala中的specs2测试一些依赖于db的东西。目标是测试“db running”,然后执行测试。我发现如果数据库关闭,我可以使用Matcher类中的orSkip

问题是,我得到的是一个匹配条件的输出(已传递),而示例被标记为跳过。我想要的是:如果测试数据库脱机,只执行一个标记为“跳过”的测试。这是我的“测试工具包”的代码

下面是我的规范代码:

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")
  }
}