Я новичок в проверке scala и хочу протестировать следующую часть моего приложения. Я хочу сгенерировать 30 и 20 случайных событий и проверить, правильно ли код моего приложения вычисляет результат
// generate 30 random events
val eventGenerator: Gen[Event] = for {
d <- Gen.oneOf[String](Seq("es1", "es2", "es3"))
t <- Gen.choose[Long](minEvent.getTime, maxEvent.getTime)
s <- Gen.oneOf[String](Seq("s1", "s2", "s3", "s4", "s5", "s6", "s7"))} yield Event(d, t, s)
val eventsGenerator: Gen[List[VpSearchLog]] = Gen.containerOfN[List, VpSearchLog](30, eventGenerator)
// generate 20 random instances
val instanceGenerator: Gen[Instance] = for {
d <- Gen.oneOf[String](Seq("es1", "es2", "es3"))
t <- Gen.choose[Long](minInstance.getTime, maxInstance.getTime)} yield Instance(d, new Timestamp(t))
val instancesGenerator: Gen[List[Instance]] = Gen.containerOfN[List, Instance](20, instanceGenerator)
val p: Prop = forAll(instancesGenerator, eventsGenerator) { (i, e) =>
println(i.size)
println(e.size)
println()
val instancesWithFeature = computeExpected(instance)
isEqual(transform(instance), instanceWithFeature)
}
Почему-то я вижу это в stdout
20
15
20
7
20
3
20
1
20
0
starting to compute expected:
По сути, похоже, что forAll генерирует пару входов определенного размера и затем пропускает их. По некоторым причинам, он начинает вычислять вещи, когда один из входных данных имеет размер 0, а затем начинает соответствующую проверку. Мои вопросы:
- почему, если я использую
containerofN
или listOfN
, я не получаю точно ввод этого определенного размера? Как я могу генерировать ввод, как это?
- Это нормально, что forAll начинает исследовать пространство возможного ввода и пропускает некоторые из них? Я что-то здесь упускаю? Это поведение совершенно нелогично для меня