首页 > 解决方案 > 如何在 grails 3.3.8 中模拟被测控制器的方法

问题描述

我在测试的控制器中有一个私有方法,我已经练习过,只是想在进一步的测试中进行模拟。在 grails 2.3.4 中,以下代码有效:

controller.metaClass.method = { a, b -> 'value' }

但是在grails 3.3.8这似乎没有效果,它使用了实际的控制器方法。我如何在 grails 3.3.8 中模拟这个?

标签: grailsmockingmetaclass

解决方案


我终于在这里找到了一些信息:

每个实例的 groovy metaClass 方法覆盖在 spock 测试中没有按预期工作

和链接的错误报告:

https://issues.apache.org/jira/browse/GROOVY-7368

我尝试将类型添加到参数中,这似乎不是很时髦,而且无论如何也没有什么不同。

从方法中删除“私有”确实允许元类模拟工作并且测试用例通过。我不是很喜欢那个解决方案,但现在这就是我所拥有的。


推荐阅读