我需要生成对象列表。每个对象必须包含预定值和生成的值。 我创建了生成器,但不确定这是真正的方法。 有没有办法让它更具可读性?
object Test {
case class A(myInt: Int, randomInt: Int)
val list = List(1, 2, 3, 4, 5)
val subListGen = Gen.someOf(list)
val randomIntGen = Gen.choose(0,10)
import scala.collection.JavaConverters._
val seqAGen: Gen[Seq[A]] = for {
subsetMyInts <- subListGen
seqOfRandomIntsWithSizeEqualGenSubList <- Gen.sequence(subsetMyInts.map(x => randomIntGen))
} yield {
subsetMyInts.zip(seqOfRandomIntsWithSizeEqualGenSubList.asScala.toList).map(x => A(x._1, x._2))
}
}
答案 0 :(得分:2)
首先,我们可能希望为单个实例实现生成器:
val aGen: Gen[A] = for {
myInt <- Gen.oneOf(list:_*)
randomInt <- Gen.choose(0, 10)
} yield A(myInt, randomInt)
然后 - 生成这些对象的列表:
val listOfAGen = Gen.listOf(aGen)
如果您不关心myInt
s的唯一性,这将有效。
答案 1 :(得分:0)
使用.sample
的方法object Test {
case class A(myInt: Int, randomInt: Int)
val list = List(1, 2, 3, 4, 5)
val randomIntGen = Gen.choose(0,10)
val seqAGen: Gen[Seq[A]] = Gen.someOf(list.flatMap(myInt => randomIntGen.sample.map(A(myInt, _))))
}