Я не уверен, как быть универсальным, так как я не знаком с получением автоматической деривации для Arbitrary
с scalacheck-magnolia.Кажется, что scalacheck-magnolia хорош для получения Arbitrary
для классов дел, но, возможно, не для контейнеров (списков, векторов, массивов и т. Д.).
Если вы хотите просто использовать простой ScalaCheck, вымог бы просто определить неявное Arbitrary
для A
.Делать это вручную - это дополнительный пример, но у вас есть преимущество в том, что вы имеете больший контроль, если хотите использовать разные генераторы для разных частей вашей структуры данных.
Вот пример, где список Arbitrary
longs не является пустым по умолчанию, но пуст для B
.
implicit val listOfLong =
Arbitrary(Gen.nonEmptyListOf(Arbitrary.arbitrary[Long]))
implicit val arbC = Arbitrary {
Gen.resultOf(C)
}
implicit val arbB = Arbitrary {
implicit val listOfLong =
Arbitrary(Gen.listOf(Arbitrary.arbitrary[Long]))
Gen.resultOf(B)
}
implicit val arbA = Arbitrary {
Gen.resultOf(A)
}
property("arbitrary[A]") = {
Prop.forAll { a: A =>
a.b.list.size >= 0 && a.c.list.size > 0
}
}