#scala #scalacheck
#scala #scalacheck
Вопрос:
У меня есть вопрос новичка для ScalaCheck, с которым я играю в первый раз. Возможно ли создать Gen[Int]
, который будет прогрессировать линейно, скажем, от 0 до N.
Такое, что при использовании forAll
в ScalaCheck это увеличит входные данные Int
на 1.
Я бы хотел, чтобы этот пример тестировался с возрастающим значением
"Increase" should "always increase" in {
forAll(validNumbers){ i:Int =>
increase(i) should be (i 1)
}
}
Возможно, это разрушает цель ScalaChecks, и я должен просто протестировать этот способ в ScalaTest.
Ответ №1:
Вы могли бы сделать что-то вроде этого:
def validNumbers(n: Int): Gen[Int] = Gen.resultOf[Int, Int] {
new (Int => Int) {
val current = (0 to n).iterator
def apply(i: Int): Int = {
if(current.hasNext) current.next else sys.error("No more numbers")
}
}
}
Однако я думаю, что вы действительно правы, что это разрушает цель ScalaChecks. Простой цикл for в этом случае подошел бы лучше.
Комментарии:
1. Спасибо за это — вы правы, простой цикл for в ScalaTest намного лучше подходит для моих текущих потребностей.