如何在Grails中使用单元测试来测试Groovy Domain-Classes的initBefore方法?
我创建了虚拟对象,但是在调用myObject.save()并且在测试环境中保存不可用之前,不调用beforeInsert方法。
编辑:它是一个单元测试。没有错误,但是没有调用beforeInsert方法
答案 0 :(得分:4)
在单元测试期间调用beforeInsert。我可以在我的测试中验证这一点。需要考虑的几件事情:
答案 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来测试beforeInsert
和beforeUpdate
方法。
希望这有帮助!