在域类上调用.save()失败,单元测试中没有方法.save()的签名

时间:2011-07-20 23:45:56

标签: unit-testing grails gorm

我在NetBeans中使用Grails 1.3.2。我有一个非常简单的单元测试失败了这个错误:

  

没有方法签名:com.maxrecall.maxrequire.domain.Release.save()   适用于参数类型:(java.util.LinkedHashMap)值:   [[flush:true]]可能的解决方案:wait(),any(),wait(long),   isCase(java.lang.Object),use([Ljava.lang.Object;),sleep(long)

相关代码是:

Release rel = new Release()
...
rel.save(flush:true) 

相同的代码适用于BootStrap.groovy。我已尝试过.save()的各种变体(。使用和不带参数保存。

2 个答案:

答案 0 :(得分:7)

这是一个单元测试,所以没有Spring,Hibernate等。你必须嘲笑你想要的行为。

如果您正在测试持久性,则需要将测试转换为集成测试,因为使用单元测试测试持久性只是测试模拟框架。集成测试至少使用内存数据库,尽管您可以轻松地将其切换为MySQL / Oracle /等的测试实例。

如果您正在测试域类的控制器或其他用户并且只是希望它们工作以便您可以专注于测试当前类,请使用mockDomain和Grails单元测试基类中提供的其他模拟方法。

这些都在文档中详细描述 - 请参阅http://grails.org/doc/latest/guide/9.%20Testing.html

答案 1 :(得分:2)

单元测试中没有grails魔法(它在集成测试中存在)。请参阅“了解mockDomain()”here或阅读Grails docs