域类insertBefore的Grails单元测试

时间:2011-05-25 11:19:47

标签: groovy grails-domain-class grails-constraints

如何在Grails中使用单元测试来测试Groovy Domain-Classes的initBefore方法?

我创建了虚拟对象,但是在调用myObject.save()并且在测试环境中保存不可用之前,不调用beforeInsert方法。

编辑:它是一个单元测试。没有错误,但是没有调用beforeInsert方法

4 个答案:

答案 0 :(得分:4)

在单元测试期间调用beforeInsert。我可以在我的测试中验证这一点。需要考虑的几件事情:

  1. 确保使用beforeInsert方法,而不是闭包。闭包不能正常工作。
  2. 在刷新对象时调用它,因此您可能事先有静默保存错误。在保存对象的测试中,执行.save(flush:true,failOnError:true)

答案 1 :(得分:0)

如果调用beforeInsert方法或者beforeInsert的逻辑是否正确,你想要测试吗?

如果要测试是否正在调用beforeInsert,则测试类应该扩展GrailsUnitTestCase。这样做应该为您提供模拟功能并添加所有方法,如save()和validate()。您可以在执行save()时验证模拟对象是否调用了beforeInsert方法。

如果您正在测试beforeInsert的逻辑,那么您不需要模拟它。您可以像其他单元测试一样创建对象并测试逻辑。

希望这有帮助。

答案 2 :(得分:0)

只需创建一个域对象并保存()即可。然后检查“beforeInsert”是否操纵了你的对象。

save()在测试环境中可用。请在调用myDomainobject.save()

时显示您的Stacktrace

答案 3 :(得分:0)

我有同样的问题!在GORM中(至少在当前版本之前),save方法不会因为被调用而立即生效!如果您希望它立即生效,您需要指定flush:true,例如domain.save(flush:true)

它在这里说http://grails.org/doc/2.2.x/ref/Domain%20Classes/save.html

  

save方法通知持久化上下文一个实例   应该保存或更新。该对象不会被持久化   除非使用flush参数,否则立即执行:

要回答你的问题,在保存持久化之前不会调用beforeInsert(保存生效),因此你应该调用save with flush来测试beforeInsertbeforeUpdate方法。

希望这有帮助!