specs2验收测试中的case类上下文:“must不是Int的成员”

时间:2012-03-09 17:06:52

标签: scala bdd specs2

我在scala(v2.9.1)上使用specs2(v1.8.2)来编写验收测试。按照http://etorreborre.github.com/specs2/guide/org.specs2.guide.SpecStructure.html#Contexts的示例,我有以下规范和上下文案例类:

import org.specs2._


class testspec extends SpecificationWithJUnit { def is =

    "test should" ^
        "run a test in a context" ! context().e1

}

case class context() {

    def e1 = 1 must beEqualTo(1)
}

我收到编译错误:

  

错误:值必须不是Int def e1 = 1的成员必须是EquaTo(1)

编译上下文案例类时。

显然我是specs2(和Scala)的新手。我们将非常感谢您对相应文档的参考。

2 个答案:

答案 0 :(得分:3)

显然文档是错误的( 错误,我现在修复了它。)

正确的写入方式是为上下文声明case类通常是将它包含在Specification范围内:

import org.specs2._

class ContextSpec extends Specification { def is =
  "this is the first example" ! context().e1

  case class context() {
    def e1 = List(1,2,3) must have size(3)
  }
}

否则,如果您想在另一个规范中重用上下文,您可以像Dario所写的那样,通过导入MustMatchers对象方法或继承MustMatchers来访问MustMatchers功能性状。

答案 1 :(得分:2)

必须不是Int的成员,因为“must”在“context”类的上下文中是未知的。将方法“e1”放在规范类中,它应该可以工作。 E.g。

import org.specs2._

class TestSpec extends Specification { def is =
  "test should" ^
    "run a test in a context" ! e1 ^
    end

  def e1 = 1 must beEqualTo(1)

}

修改

啊,我看到你想要的东西;-)。这应该是这样的:

要使匹配器位于上下文类的范围内,您必须导入MustMatchers。

import org.specs2._
import matcher.MustMatchers._

class ContextSpec extends Specification { def is =
  "this is the first example" ! context().e1
}

case class context() {
  def e1 = List(1,2,3) must have size(3)
}