3

我正在对一些代码进行单元测试,这些代码使用 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 魔法?

4

0 回答 0