Groovy 域类insertBefore的Grails单元测试

Groovy 域类insertBefore的Grails单元测试,groovy,grails-domain-class,grails-constraints,Groovy,Grails Domain Class,Grails Constraints,如何使用Grails中的单元测试测试Groovy域类的initBefore方法 我创建了虚拟对象,但在调用myObject.save()并且save在测试环境中不可用之前,不会调用beforeInsert方法 编辑:这是一个单元测试。没有错误,但未调用beforeInsert方法是否要测试beforeInsert方法是否正在调用或beforeInsert的逻辑是否正确 如果要测试beforeInsert是否被调用,测试类应该扩展GrailsUnitTestCase。这样做应该会提供模拟功能,并添

如何使用Grails中的单元测试测试Groovy域类的initBefore方法

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


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

是否要测试beforeInsert方法是否正在调用或beforeInsert的逻辑是否正确

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

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


希望这有帮助。

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


save()在测试环境中可用。在单元测试期间调用myDomainobject.save()之前,请在调用myDomainobject.save()时显示堆栈跟踪。我可以在测试中验证这一点。需要考虑的几件事:

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

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

    上面写着

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

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


    希望这有帮助

    作者是明确的:他创建了一个对象,试图保存它,但它在PreforeInsert之前没有调用。否,据我所知,作者:在测试环境中调用myObject.save()会导致错误。true。无论如何,这个问题还不够精确。是单元测试还是集成测试?除非调用了mockDomain,否则Save仅在集成测试中可用。未调用该方法(没有错误)。这是一个单元测试(参见问题标题,我也将其添加到了正文中)。谢谢。我建议在对象上创建一个integrationTest并调用save()。或者编写一个方法:myBeforeInsert()并将Beforeister中的代码放入其中。然后在beforeInsert中调用myBeforeInsert。然后,您可以在单元测试中测试myBeforeInsert()中的代码。使用闭包是我的问题,这源于Burt在2010年的邮件列表回复: