私は、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 の魔法はありますか?