如何在Grails的'src'文件夹中模拟类(单元测试)

时间:2011-04-26 18:00:02

标签: unit-testing grails groovy mocking

我正在尝试在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 /中的类?

谢谢!

2 个答案:

答案 0 :(得分:3)

代码没有指定它,但createMock似乎要求被模拟的类具有默认(无参数)构造函数。

/ grails-app下的普通Grails工件都有这些,而/ src下的其他类可能没有。

添加默认构造函数修复了我遇到此错误时的错误。

另见https://groups.google.com/forum/?fromgroups=#!topic/groovymn/u2Ng_RM224A有关此问题的相关讨论。

答案 1 :(得分:2)

这个答案可以为您提供所需的信息。

Mocking out constructors in Grails