Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala spec2我无法创建一个同时使用must be_==和failure的测试_Scala_Testing_Specs2_Scala 2.11_Spec2 - Fatal编程技术网

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

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 {

我是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[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处理失败是没有用的。酷。谢谢这正是我想要的。工作是一种享受。