怎么了?为什么人是空的?
import org.scalacheck.{Arbitrary, Properties, Gen, Prop}
import Gen._
import Prop._
case class Person(name: String) {}
object QuickCheckPerson extends Properties("Person") {
property("gen1") = forAll { (person: Person) =>
println("person: " + person)
person.name == "john" // nullPointerException, because person == null
}
val john = Person("john")
implicit lazy val arbPerson: Arbitrary[Person] = Arbitrary(value(john))
}
QuickCheckPerson.check
它因 NullPointerException 而失败。
但是,如果我val john = Person("john")
在property("gen1") = ...
.
为什么??
更新
如果我声明val john
as ,则该示例有效lazy
。所以,似乎在lazy val arbPerson
之前执行val john
,但如果是这样,scala 编译器应该会失败,说john
没有定义。john
是 a val
,也不是 a var
,所以要么声明并实例化它,要么不声明。
对此有任何想法吗?
ps:斯卡拉2.10.3