Использование Scalacheck с чертой Inside - PullRequest
0 голосов
/ 31 мая 2018

У меня очень простой сценарий: проверьте, что любая пара случайных строк длиной 10, переданных в качестве параметров в класс case Pair (пользовательская проверяемая), должна быть одинаковой.

class ExercisesPropSpec extends PropSpec with Checkers with Matchers with Inside{

  import Exercises._

  lazy val genPairs = for {
    left <- Gen.listOfN(10, Gen.alphaChar)
    right <- Gen.listOfN(10, Gen.alphaChar)
  } yield (left.mkString, right.mkString)

  property("pattern match tuples of alphanumerics to our custom pair class"){
    forAll(genPairs) {case (left: String, right: String) =>
      val pair = Pair(left, right)
      inside(pair) { case Pair(firstName, lastName) =>
        firstName shouldEqual(left)
        lastName shouldEqual(right)
      }
    }
  }
}

Однако, когда я запускаю testOnly *ExercisesPropSpec из sbt, я получаю эту ошибку компиляции:

Compiling 1 Scala source to /home/vgorcinschi/ideaProjects/Learning Concurrent Programming in Scala/chapter01_introduction/target/scala-2.12/test-classes ...
[error] ~/ideaProjects/Learning Concurrent Programming in Scala/chapter01_introduction/src/test/scala/org/learningconcurrency/ExercisesPropSpec.scala:18:28: No implicit view available from org.scalatest.Assertion => org.scalacheck.Prop.
[error]     check(forAll(genPairs) {case (left: String, right: String) =>
[error]                            ^

Примечание в скалярной поваренной книге говорит, что

чтосообщение об ошибке указывает на то, что проверка нашего свойства не выполняется с точки зрения булевой логики

Я надеялся, что внутренний блок в конце должен возвращать логическое значение.Буду признателен, если вы укажете, чего мне не хватает в понимании тестирования на основе свойств или использовании Внутренняя черта в этой реализации.

1 Ответ

0 голосов
/ 31 мая 2018

Вам просто нужно написать

firstName == left && lastName == right

.

(Если shouldEqual вернул Boolean, результат firstName shouldEqual(left) просто будет отброшен.)

...