我正在尝试为我的 Grails 应用程序中的服务编写一些单元测试。服务“MyService”使用位于 $APP-ROOT/src/groovy/中的名为“MyHelperClass”的类。
在 MyService 的单元测试中,我尝试像这样为 MyHelperClass 创建一个模拟:
def myHelperClassMock = mockFor(MyHelperClass)
def myService = new MyService()
myService.myHelperClass = myHelperClassMock.createMock()
这给出了错误:
Error casting map to com.mycompany.myproject.MyHelperClass, Reason: Could not find matching constructor for: com.mycompany.myproject.MyHelperClass()
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Error casting map to com.mycompany.myproject.MyHelperClass, Reason: Could not find matching constructor for: com.mycompany.myproject.MyHelperClass()
at grails.test.GrailsMock.createMock(GrailsMock.groovy:91)
at grails.test.GrailsMock$createMock.call(Unknown Source)
at com.mycompany.myproject.MyServiceTests.testSomething(MyServiceTests.groovy:17)
这似乎只发生在 src/中的类中,并且对于 grails-app/services 中的类似乎工作正常。知道如何让它看到 src/中的类吗?
谢谢!
最佳答案
代码没有具体说明,但 createMock 似乎要求被模拟的类具有默认(无参数)构造函数。
/grails-app 下的普通 Grails 工件都有这些,而/src 下的一些其他类可能没有。
添加默认构造函数修复了我遇到此问题时的错误。
另见 https://groups.google.com/forum/?fromgroups=#!topic/groovymn/u2Ng_RM224A对此进行相关讨论。
关于unit-testing - 如何模拟 Grails 中 'src' 文件夹中的类(单元测试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5794467/