我想从存储库中获取一个List并断言其内容。
在以下代码中,我收到一条警告,指出无法将Object
分配给List
有没有办法添加更好的参数来处理这种情况?
myDomainObjectRepository.save(_) >> { arguments ->
final List<MyDomainObject> myDomainObjects = arguments[0]
assert myDomainObjects == [new MyDomainObject(someId, someData)]
}
答案 0 :(得分:2)
详细说明蛋白石回答:docs中有两个部分和一个与此相关的脚注:
如果闭包声明了一个无类型参数,则会传递给它 方法的参数列表:
并且
在大多数情况下,直接访问该网站会更方便 方法的论点。如果闭包声明了多个参数或 单个类型参数,方法参数将逐个映射 关闭参数[脚注]:
脚注:
闭包参数的解构语义直接来自 Groovy的。
问题是你有一个参数列表,并且由于泛型被删除,groovy无法决定你真的想要打开列表。
因此,单个非List
参数可以正常工作:
myDomainObjectRepository.save(_) >> { MyDomainObject myDomainObject ->
assert myDomainObject == new MyDomainObject(someId, someData)
}
或List
参数与第二个结合,例如save(List domain, boolean flush)
myDomainObjectRepository.save(_, _) >> { List<MyDomainObject> myDomainObjects, boolean flush ->
assert myDomainObjects == [new MyDomainObject(someId, someData)]
}
所以文档对这个边缘情况有点误导。对于这种情况,我担心你会因为施法而陷入困境。
编辑:如果你这样做,你应该能够摆脱IDE警告。
myDomainObjectRepository.save(_) >> { List<List<MyDomainObject>> arguments ->
List<MyDomainObject> myDomainObjects = arguments[0]
assert myDomainObjects == [new MyDomainObject(someId, someData)]
}
答案 1 :(得分:1)