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

Unit testing 对域类调用.save()失败,单元测试中没有方法.save()的签名,unit-testing,grails,gorm,Unit Testing,Grails,Gorm,我在NetBeans中使用Grails1.3.2。我有一个非常简单的单元测试,但失败了,出现了以下错误: 没有方法的签名:com.maxrecall.maxrequire.domain.Release.save() 适用于参数类型:(java.util.LinkedHashMap)值: [[flush:true]]可能的解决方案:wait(),any(),wait(long), isCase(java.lang.Object),使用([Ljava.lang.Object;),睡眠(long) 有

我在NetBeans中使用Grails1.3.2。我有一个非常简单的单元测试,但失败了,出现了以下错误:

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

有关守则如下:

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

同样的代码在BootStrap.groovy中也可以使用。我在.save()上尝试了不同的版本(.save有参数和没有参数)。

在单元测试中没有grails魔力(它在集成测试中)。请参阅“理解mockDomain()或者阅读。

这是一个单元测试,因此没有Spring、Hibernate等。你必须模仿你想要的行为

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

如果您正在测试域类的控制器或其他用户,并且只想让它们工作,以便能够集中精力测试当前类,那么可以使用mockDomain和Grails单元测试基类中提供的其他mock方法

这些都在文档中有详细描述-请参阅