我正在对一些代码进行单元测试,这些代码使用Grails链接生成器来生成链接;-)。在我正在测试的代码中出现以下语句。
grailsLinkGenerator.link(mapping: "someUrlMappingName", id: someObject.id)
在查看接口LinkGenerator
的源代码时,我们会看到以下方法签名。
String link(@SuppressWarnings("rawtypes") Map params, String encoding);
Groovy将命名参数列表视为地图,其描述为here。我明白了。然而,我不明白为什么以下(Spock)模拟不起作用。
1 * factory.grailsLinkGenerator.link(mapping: "someUrlMappingName", id: someObject.id)
我必须明确地将命名参数放在一个映射中,如下例所示。
1 * factory.grailsLinkGenerator.link([mapping: "someUrlMappingName", id: someObject.id])
有人能解释一下这里发生了什么吗?这是Spock模拟库的限制吗?还有其他一些Grails或Groovy魔法在继续吗?我还没有掌握(还)?