为什么不能在没有显式映射的情况下使用命名参数Spock模拟Groovy和/或Grails方法?

时间:2013-04-30 07:40:13

标签: grails groovy spock

我正在对一些代码进行单元测试,这些代码使用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魔法在继续吗?我还没有掌握(还)?

1 个答案:

答案 0 :(得分:0)

请在http://issues.spockframework.org提出问题。一个独立的可重复的例子,理想情况下没有混合中的Grails,会有很大的帮助。