如何在 grails 3.3.8 中模拟被测控制器的方法
Posted
技术标签:
【中文标题】如何在 grails 3.3.8 中模拟被测控制器的方法【英文标题】:How to mock a method of the controller under test in grails 3.3.8 【发布时间】:2019-05-14 23:13:43 【问题描述】:我在被测试的控制器中有一个私有方法,我已经练习过了,只是想在进一步的测试中进行模拟。在 grails 2.3.4 中,以下代码有效:
controller.metaClass.method = a, b -> 'value'
但是在 grails 3.3.8 中这似乎没有效果,并且它使用了实际的控制器方法。如何在 grails 3.3.8 中模拟这个?
【问题讨论】:
【参考方案1】:我终于在这里找到了一点信息:
groovy per instance metaClass method override doesnt work as expected in spock test
和链接的错误报告:
https://issues.apache.org/jira/browse/GROOVY-7368。
我尝试将类型添加到参数中,这些类型看起来不是很时髦,但也没有任何区别。
从方法中删除“私有”确实允许元类模拟工作并且测试用例通过。我不是很喜欢那个解决方案,但现在我只有这些了。
【讨论】:
以上是关于如何在 grails 3.3.8 中模拟被测控制器的方法的主要内容,如果未能解决你的问题,请参考以下文章
在 grails 控制器中模拟命令对象导致 hasErrors() 无论如何都返回 false !请帮忙
单元测试控制器时无法模拟 Grails 服务方法 - MissingMethodException