Добавление scalacheck в пример specs2+spray-testkit

Попытка добавить scalacheck в пример spray-testkit + spec2: service со следующим маршрутом:

def myRoute = get(
  path("add" / IntNumber / IntNumber) ((a, b) =>
    complete((a+b).toString)
  )
)

и тестовая спецификация для него:

  "MyService" should {
    "do calculation" in {
      Get("/add/30/58") ~> myRoute ~> check {
        responseAs[String] === "88"
      }
    }
    "do calculation with scalacheck" in {
      check { (a: Int, b: Int) ⇒
        Get(s"/add/$a/$b") ~> myRoute ~> check {
          responseAs[String] === s"${a+b}"
        }
      }
    }
  }

должно быть довольно просто, но мой мозг не позволяет сформулировать второй тест. я получаю ошибку, как

...MyService.Spec.scala:44: not found: value a"
 check { (a:Int, b:Int)
          ^
...MyService.Spec.scala:44: value ? is not a member of (Int, Int)
 check { (a:Int, b:Int) ?
                        ^

что здесь происходит и как исправить?


person python_kaa    schedule 29.10.2015    source источник


Ответы (1)


Замените => для стрелки вместо символа Юникода .

Тогда вы должны использовать prop вместо check и написать:

"do calculation with scalacheck" in {
  prop { (a: Int, b: Int) =>
    Get(s"/add/$a/$b") ~> myRoute ~> check {
      responseAs[String] === s"${a+b}"
    }
  }
}
person Eric    schedule 29.10.2015
comment
извините, в сообщении об ошибке не было закрывающейся фигурной, моя ошибка - person python_kaa; 29.10.2015
comment
Можете ли вы попробовать использовать => для стрелки вместо символа Юникода ? - person Eric; 29.10.2015
comment
Да это было! Наверное, это делает IDEA. Сейчас выглядит лучше, но теперь в ключевом слове: не удалось найти неявное значение для параметра доказательства типа org.specs2.execute.AsResult[MyServiceSpec.this.RouteResult =› ((Int, Int) =› org.specs2.matcher.MatchResult[ Любой - person python_kaa; 29.10.2015
comment
Я думаю, что проблема связана с использованием check. Смотрите мой отредактированный ответ. - person Eric; 29.10.2015
comment
как импортировать реквизит? из какого пространства имен это происходит? - person python_kaa; 29.10.2015
comment
Вы получите его, если расширите трейт org.specs2.ScalaCheck в своей спецификации. Также вам нужно убедиться, что у вас есть банка specs2-scalacheck в пути к классам (и, конечно, банка scalacheck). - person Eric; 29.10.2015
comment
да теперь работает! Спасибо, без вашей помощи не разобрался. Теперь тест работает, но терпит неудачу после нескольких попыток, когда запрос не был обработан, но я думаю, что это другая проблема. - person python_kaa; 29.10.2015
comment
кто-нибудь, вы можете взглянуть на этот вопрос? это сводит меня с ума - person python_kaa; 27.01.2016