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