Как правильно использовать Prop.delay в ScalaCheck?

Задержанные генераторы могут иметь смысл для рекурсивных структур данных. Мне интересно, в какой ситуации это Prop.delay может быть полезным Не могли бы вы продемонстрировать пример из реальной жизни.

1 ответ

Мне интересно, в какой ситуации эта задержка может быть полезной. Не могли бы вы продемонстрировать пример из реальной жизни.

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

На самом деле, Scalacheck использует Prop.delay построить свойства внутри, чтобы позволить пользователям определять тесты с Properties черта / суперкласса.

class BadExample extends Properties("Bad example") {
  property("divide by 0") = {
    Prop.forAllNoShrink { x: Int =>
      x / 0 == 0 // No!
    }
  }
}

Это собирает свойства так, чтобы они могли быть выполнены исполнителем теста (как приложение или через sbt)

sealed class PropertySpecifier() {
  def update(propName: String, p: => Prop) = {
    props += ((name+"."+propName, Prop.delay(p)))
  }
}

private val props = new scala.collection.mutable.ListBuffer[(String,Prop)]

lazy val property = new PropertySpecifier()
Другие вопросы по тегам