scala spec2我无法创建一个同时使用must be_==和failure的测试
我是Scala和Spec2的新手 我想创建下面的测试,但是我从编译器得到一个错误 这是我想写的测试scala spec2我无法创建一个同时使用must be_==和failure的测试,scala,testing,specs2,scala-2.11,spec2,Scala,Testing,Specs2,Scala 2.11,Spec2,我是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 {
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[Object]类型的证据参数的隐式值
问候,
Shohidul最好这样写: 中的“使用基本tweet”{ val tweet=“”{“id”:1,“text”:“foo”}”“” parser.parse(tweet)又名“parsed value”必须是some.which{ case parsed=>parsed.text必须\==“foo”和( 已解析的.id必须==1) } }
您可以尝试的一件事是使SimpleParser成为一种特性。在使用Specs2时,这通常对我更有效。然后您可以调用parse(tweet)。我还建议将测试稍微分开一点
class SimpleParserSpec extends Specification with SimpleParser {
val tweet = """{"id":1,"text":"foo"}"""
SimpleParser should {
"parse out the id" in {
val parsedTweet = parse(tweet)
parsedTweet.id === 1
}
}
从这里,您可以添加要测试的其他字段
编辑:回顾我写的,我发现我没有完全回答你的问题。你可以把===和失败放在你已经遇到过的情况下,但是在我的框架内。编译器在这里产生一个错误,因为他试图将
匹配结果[Option[Parsed]]]
与类型的失败统一起来。它们统一为对象
,编译器找不到该对象的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
您的代码示例运行良好。但是,有没有一种方法可以使用failure(),并且在使用原始问题中发布的匹配时必须同时使用_==()呢?failure
在那里是无用的,因为如果结果不匹配,那么specs将指示期望值不成功。我正在寻找的方法是ko for failure。为了成功()你会使用ok。这写在下面的回复中。对我来说,使用ok和ko会使代码更容易编写。所以你最好使用specd以外的东西。这不是应该使用的方式。在那里,用ko处理失败是没有用的。酷。谢谢这正是我想要的。工作是一种享受。