ファイルに一連の名前があります。それらを継続的に反復処理する Generator を実装する必要があります。ただし、コードはif (iter.hasNext)
最初のパスの後、無期限にハングします。
遺伝子コード
var asStream = getClass.getResourceAsStream("/firstnames/female/en_US_sample.txt")
var source: BufferedSource = Source.fromInputStream(asStream)
var iter: Iterator[String] = Iterator.continually(source.getLines()).flatten
val genLastName: Gen[String] = {
genCannedData
}
def genCannedData: Gen[String] = {
println("Generating names: " + iter)
Gen.delay {
if (iter.hasNext) {
println("In if")
Gen.const(iter.next)
}
else {
println("In else")
Gen.const(iter.next)
}
}
}
サンプル プロパティ テスト
property("FirstNames") = {
forAll(genLastName) {
a => {
println(a)
a == a
}
}
}
en_US_sample.txt ファイルの内容
Abbie
Abby
Abigail
Ada
Adah
編集-一時的な作業コード
次のコードは、イテレータを再作成すると機能しますが、なぜIterator.continually
ハングしているのか疑問に思っていましたか?
def genCannedData: Gen[String] = {
Gen.delay {
if (iter.hasNext) {
Gen.const(iter.next)
}
else {
asStream = getClass.getResourceAsStream("/firstnames/female/en_US_sample.txt")
source = Source.fromInputStream(asStream)
iter = source.getLines()
Gen.const(iter.next)
}
}
}