我在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)的新手。我们将非常感谢您对相应文档的参考。
答案 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)
}