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



我在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()()的各种变体。保存带和不带参数。

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

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

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

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

单元测试中没有grails魔法(它存在于集成测试中)。请参阅此处的"理解mockDomain()"或阅读Grails文档。

最新更新