我是 Scala 和 Spec2 的新手。
我想创建以下测试,但编译器出错。
这是我想写的测试
import org.specs2.mutable._
import org.specs2.specification._
import org.specs2.matcher._
import org.specs2.matcher.MatchResult
class SimpleParserSpec extends Specification {
"SimpleParser" should {
val parser = new SimpleParser()
"work with basic tweet" in {
val tweet = """{"id":1,"text":"foo"}"""
parser.parse(tweet) match {
case Some(parsed) => {
parsed.text must be_==("foo")
parsed.id must be_==(1)
}
case _ => failure("didn't parse tweet")
}
}
}
}
我得到错误: C:\Users\haques\Documents\workspace\SBT\jsonParser\src\test\scala\com\twitter\sample\simpleSimpleParserSpec.scala:17: 找不到类型为 org.specs2.execute.AsResult 的证据参数的隐式值[对象]
问候,
修希杜尔
最佳答案
编译器在这里产生错误,因为他试图将 MatchResult[Option[Parsed]]
与 Result
类型的失败统一起来。它们统一为 Object
并且编译器无法为其找到 AsResult
类型类实例。您可以通过为失败案例提供另一个 MatchResult
来修复示例:
parser.parse(tweet) match {
case Some(parsed) => {
parsed.text must be_==("foo")
parsed.id must be_==(1)
}
case _ => ko("didn't parse tweet")
}
ok
和 ko
方法等同于 success
和 failure
但它们是 MatchResults
而不是 Results
。
关于scala spec2 我无法创建同时使用 must be_== 和 failure 的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25290067/