Как правильно использовать 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()