首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala spec2我无法创建同时使用be_==和failure的测试

scala spec2我无法创建同时使用be_==和failure的测试
EN

Stack Overflow用户
提问于 2014-08-13 15:21:26
回答 3查看 2.2K关注 0票数 8

我对Scala和Spec2很陌生。

我想创建下面的测试,但是我从编译器那里得到了一个错误。

这是我想写的测试

代码语言:javascript
复制
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.AsResultObject类型的证据参数的隐式值。

致以敬意,

肖希杜尔

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-14 00:35:38

编译器在这里生成一个错误,因为他试图将MatchResult[Option[Parsed]]Result类型的失败统一起来。它们统一为Object,编译器找不到相应的AsResult类型实例。您可以通过为失败案例提供另一个MatchResult来修复您的示例:

代码语言:javascript
复制
parser.parse(tweet) match {
  case Some(parsed) => {
    parsed.text must be_==("foo")
    parsed.id must be_==(1)
  }
  case _ =>  ko("didn't parse tweet")
}

okko方法相当于successfailure,但它们是MatchResults而不是Results

票数 8
EN

Stack Overflow用户

发布于 2014-08-13 16:22:26

最好写如下:

代码语言:javascript
复制
"work with basic tweet" in {
  val tweet = """{"id":1,"text":"foo"}"""
  parser.parse(tweet) aka "parsed value" must beSome.which {
    case parsed => parsed.text must_== "foo" and (
      parsed.id must_== 1)
  }
}
票数 2
EN

Stack Overflow用户

发布于 2014-08-13 16:29:22

你可以尝试的一件事是让SimpleParser成为一种特质。在使用Specs2时,这通常对我更好。然后你可以调用解析(Tweet)。我也建议把测试分开一点。

代码语言:javascript
复制
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
         }
}

在这里,您可以添加您想要测试的其他字段。

编辑:回顾我写的东西,我发现我没有完全回答你的问题。您可以将===和失败放在像您已经有的情况下,但是在我所拥有的框架内。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25290067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档