scala 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 {
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[Объект]
С Уважением,
Shohidul
3 ответа
Компилятор выдает здесь ошибку, потому что он пытается унифицировать 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
,
Лучше бы написать это следующим образом:
"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)
}
}
Одна вещь, которую вы могли бы попробовать, это сделать SimpleParser свойством. Обычно это работает лучше для меня при использовании Specs2. Тогда вы можете позвонить parse (твит). Я бы также предложил немного разбить тесты.
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
}
}
Отсюда вы можете добавить другие поля, которые вы хотите проверить.
РЕДАКТИРОВАТЬ: оглядываясь на то, что я написал, я вижу, что я не полностью ответил на то, что вы спрашивали. Вы можете поместить === и затем провал в те случаи, которые у вас уже были, но в рамках того, что у меня есть.