Как я могу использовать встроенные в Monocle юридические реализации для проверки своих объективов?

Я заметил, что в Monocle есть реализации законов линз, которые используются для тестирования внутренних библиотек. Они кажутся хорошо обобщенными и модульными. Я пытался использовать их для проверки своих собственных линз, но я потерялся в джунглях зависимостей. Кто-нибудь пытался сделать это, и мог бы опубликовать пример? Документация, кажется, не говорит о законах вообще. Спасибо.

Чтобы уточнить, вот что я пытаюсь сделать (возится, не уверен, что я использую предполагаемый способ использования API):

it should "pass the LensLaws" in check {
  forAll {(c: (String,Int), a: String) =>
    new monocle.law.LensLaws(l).setGet(c,a) }   }

где l - объектив Monocle, видимый в области видимости. Я получаю следующее сообщение об ошибке:

No implicit view available from monocle.internal.IsEq[String] => org.scalacheck.Prop

Насколько я вижу, закон setGet создает объект IsEq, и я не смог найти, как превратить его в Prop (или Boolean).

Я также вижу, что в фреймворке используется функция checkAll для одновременного тестирования всех LensLaws, но я также не смог заставить это работать в моем собственном коде. Любая помощь приветствуется.

1 ответ

Решение

Следующее работает для меня

import org.scalatest.FunSuite
import org.typelevel.discipline.scalatest.Discipline

class LensesSuite extends FunSuite with Discipline {

  import scalaz._
  import Scalaz._

  checkAll("Lens l", monocle.law.discipline.LensTests(l))
}

Оказывается, главной проблемой были мои относительно короткие знания о скалестате. checkAll - это средство проверки, предоставляемое org.typelevel.discipline.scalatest.Discipline, которое работает только в FunSuite (не в FlatSpec, который я использовал). Мне понадобились годы, чтобы понять это...

До сих пор не знаю, как элегантно использовать этот RuleSet (LensTests) в другой спецификации. Кажется странным, что выбор RuleSet от Monocle привел бы к применению стиля Spec в проекте с использованием этих тестов.

Другие вопросы по тегам