如何使用 Grails 中的单元测试来测试 Groovy Domain-Classes 的 initBefore 方法?
我创建了虚拟对象,但在调用 myObject.save() 之前不会调用 beforeInsert 方法,并且 save 在测试环境中不可用。
编辑:它是一个单元测试。没有错误,但是没有调用 beforeInsert 方法
如何使用 Grails 中的单元测试来测试 Groovy Domain-Classes 的 initBefore 方法?
我创建了虚拟对象,但在调用 myObject.save() 之前不会调用 beforeInsert 方法,并且 save 在测试环境中不可用。
编辑:它是一个单元测试。没有错误,但是没有调用 beforeInsert 方法
在单元测试期间调用 beforeInsert。我可以在我的测试中验证这一点。需要考虑的几件事:
是否要测试 beforeInsert 方法是否被调用或 beforeInsert 的逻辑是否正确?
如果你想测试 beforeInsert 是否被调用,测试类应该扩展 GrailsUnitTestCase。这样做应该为您提供模拟功能并添加所有方法,如 save() 和 validate()。您可以在执行 save() 时验证模拟对象是否调用了 beforeInsert 方法。
如果您正在测试 beforeInsert 的逻辑,那么您不需要模拟它。您可以像其他单元测试一样创建对象并测试逻辑。
希望这可以帮助。
只需创建一个域对象并保存()它。然后检查“beforeInsert”是否操纵了您的对象。
save() 在测试环境中可用。请在调用 myDomainobject.save() 时显示您的 Stacktrace
我有同样的问题!在 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
方法。
希望这可以帮助!