我怎么可以跳过不匹配器在specs2测试?(How can i skip a test in spe

2019-09-17 20:31发布

我想测试一些分贝依赖的东西在斯卡拉specs2。 我们的目标是测试“DB运行”,然后执行测试。 我想通了,我可以从匹配器类,如果该数据库出现故障时使用orSkip。

的问题是,我得到输出用于所述一个匹配条件(如通过)和实施例被标记为跳过。 我要的不是:只执行一个测试中的情况下标记为“跳过”了的测试数据库脱机。 这里是我的“TestKit”的代码

package net.mycode.testkit

import org.specs2.mutable._
import net.mycode.{DB}


trait MyTestKit {

  this: SpecificationWithJUnit =>

  def debug = false

  // Before example
  step {
    // Do something before
  }

  // Skip the example if DB is offline
  def checkDbIsRunning = DB.isRunning() must be_==(true).orSkip

  // After example
  step {
    // Do something after spec
  }
}

在这里,我的规范的代码:

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

输出I希望它是:

Test MyClass should::do something(net.mycode.MyClassSpec) PASSED
Test MyClass should::do something with db(net.mycode.MyClassSpec) SKIPPED

Answer 1:

我想你可以使用一个简单的条件做你想要什么:

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


Answer 2:

您是否尝试过使用args(skipAll=true)的说法? 看到这里举几个例子 。

不幸的是(据我所知),你不能跳过一个单元规格只举一个例子。 你可以,但是,跳过规格结构用这样的说法是这样,所以你可能需要创建单独的规范:

class MyClassSpec extends SpecificationWithJUnit {

  args(skipAll = false)

  "MyClass" should {
    "do something" in {
      success
    }

    "do something with db" in {
      success
    }
  }
}


Answer 3:

一个新的特点解决这一已被添加到规范2.3.10 。



文章来源: How can i skip a test in specs2 without matchers?