我正在尝试在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 /中的类?
谢谢!
答案 0 :(得分:3)
代码没有指定它,但createMock似乎要求被模拟的类具有默认(无参数)构造函数。
/ grails-app下的普通Grails工件都有这些,而/ src下的其他类可能没有。
添加默认构造函数修复了我遇到此错误时的错误。
另见https://groups.google.com/forum/?fromgroups=#!topic/groovymn/u2Ng_RM224A有关此问题的相关讨论。
答案 1 :(得分:2)
这个答案可以为您提供所需的信息。