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

标签 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/中的类吗?

谢谢!

最佳答案

代码没有具体说明,但 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/

相关文章:

grails - 在Grails中获取当前的浏览器网址

java - UncaughtExceptionHandler 未调用

c# - 预期异常时应用 Arrange-Act-Assert 模式的最佳方法

unit-testing - NUnit(或 NUnitLite)和 .NET CF 的 "Getting started"问题

ruby-on-rails - 带有模拟静态方法和非静态方法的 Rspec 测试

grails - 只有一个元素时遍历数组

exception - 实时 Grails Web 应用程序中的邮件异常日志

json - Groovy - 在不知道每个键的情况下将 XML 转换为 JSON

reactjs - 在 React 中测试 mapbox-gl 时如何修复 'window.URL.createObjectURL is not a function'?

Grails 2.4.4 无法创建 codecLookup bean