我希望能够指定一个没有在易于模拟的特征中定义的类的任意属性(val或def)。其动机是为实体提供灵活的引用 - 一对'值,要与之匹配的对象的属性,如下所示:
case class Employee(id :Long, name :String)
case class Ref[E, T](value :T, property :Property[E])
def Ref[E, T](prop :E=>T, value :T) = new Ref(value, Property(prop))
使用它像:
val ref = Ref[Employee](_.name, "Motoko")
val major :Employee = repository(ref).head.get
任务是实现Property类,以便在
行中进行任意两次调用Property[Employee](_.name)
...
Property[Employee](e=> e.name)
将返回相等的实例,并且存储库实现可以使用内部映射Map [Property,Query]为传递的引用创建适当的选择。我的第一次尝试是使用javaassist来拦截和记录方法调用,并使用接收的overriden方法作为属性标识符,但是在模拟创建期间它甚至在到达我的处理程序之前在一些合成的scala init方法上产生了NoSuchMethodError。我觉得像scalamock这样的scala库应该很容易实现,但是我无法在API中找到相关的功能。