我有一个看起来像这样的类:
class EpidemySimulator extends Simulator {
...
class Person{
// Implementation
}
}
我想添加一个内部类 Persons 的 Arbitrary,以便我可以在 EpidemySimulator 类上定义一些属性。我认为伴随对象可以定义必要的隐式生成器,以便定义将生成 Person 类型对象的属性。
object EpidemySimulator
{
implicit def arbPerson(implicit sim: EpidemySimulator ) =
Arbitrary(for(n <- Gen.choose(1, roomRows * roomColumns))yield{ new sim.Person(n) })
def propertyOne(sim: EpidemySimulator ) = forAll { person: sim.Person =>
person.row > 0 && person.row < roomRows && person.col > 0 && person.col < roomColumns
}
}
Arbitrary[sim.Person]
我的理解是,如果我提供了创建给定特定(隐式提供)的隐式函数,sim:EpidemySimulator
那么我应该能够创建一个属性,如propertyOne
. 但是我在属性上得到一个编译器错误,上面写着
Multiple markers at this line
- identifier expected but ';' found.
- not enough arguments for method forAll: (implicit p: Boolean => org.scalacheck.Prop, implicit a1: org.scalacheck.Arbitrary[sim.Person],
implicit s1: org.scalacheck.Shrink[sim.Person], implicit pp1: sim.Person => org.scalacheck.Pretty)org.scalacheck.Prop. Unspecified value parameters
a1, s1, pp1.
- could not find implicit value for parameter a1: org.scalacheck.Arbitrary[sim.Person]
- type <error> is not a member of simulations.EpidemySimulator
任何想法我做错了什么。我希望能够最终:
class EpidemySuite extends FunSuite with Checkers {
test("EpidemySimulator fulfills property one"){
val es = new EpidemySimulator
check( EpidemySimulator.propertyOne(sim) )
}
}