ScalaCheck произвольный класс case с генерацией случайных данных (Magnolia)

#scala #scalatest #scalacheck #magnolia-scala

#scala #scalatest #проверка scalacheck #magnolia-scala

Вопрос:

Используя базовый пример, я пытаюсь случайным образом сгенерировать кучу экземпляров Person ( case class Person(name: String, age: Int ), используя эту библиотеку для генерации случайных данных.

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

   val arbPersonUnder18: Arbitrary[Person] = Arbitrary(
    for {
      name <- Gen.alphaStr
      age <- Gen.chooseNum(Int.MinValue, 17)
    } yield Person(name, age)
  )

  "validatePersonForAlcohol" should {
    "ensure people with age less than 18 cannot buy alcohol" in {
      implicit val _: Arbitrary[Person] = arbPersonUnder18
      forAll { person: Person =>
        ...
      }
    }
  }

  

Что приводит к could not find implicit value for parameter arbA: org.scalacheck.Arbitrary[pbtexample.Person]

Я не понимаю, почему он не может найти нужный ему произвольный, любой совет был бы полезен.

Комментарии:

1. @jwvh вот и все, спасибо 🙂 Если вы опубликуете это в качестве ответа, я буду рад пометить его как принятый

Ответ №1:

Несмотря на то, что на неявное значение редко, если вообще когда-либо, ссылаются по имени, оно все равно нуждается в нем, что в спецификации языка называется «стабильным идентификатором».

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