在grails中使用mockDomain时,如何覆盖方法的逻辑? [英] How can I overwrite a method's logic when using mockDomain in grails?

查看:184
本文介绍了在grails中使用mockDomain时,如何覆盖方法的逻辑?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想像往常一样模拟一个域( mockDomain(Class)),但是我想覆盖一个域的方法( beforeDelete 是具体的),只需要一个单位测试。

I would like to mock a domain with everything as usual (mockDomain(Class)), but I would like to overwrite one of the domain's methods (beforeDelete to be specific) with custom logic just for that one unit test.

如何实现? strong>

How can this be achieved?

推荐答案

您可以使用Groovy metaClass覆盖您的域类的beforeDelete方法。

You can override the beforeDelete method on your domain class using Groovy metaClass.

域类:

class Person {
  String name
  boolean deleted

  def beforeDelete() {
    println "Deleting Person ${id}"
    deleted = true
    return false
  }
}

单元测试:

void testBeforeDelete() {
    mockDomain(Person)
    def p = new Person(name:"test")
    p.save()
    assertEquals false, p.deleted
    p.delete()
    assertEquals true, p.deleted
}

- testBeforeDelete的输出 -

--Output from testBeforeDelete--

删除个人1

void testBeforeDeleteOverrideBeforeDelete() {
    mockDomain(Person)
    Person.metaClass.'static'.beforeDelete = {println 'Do not touch me'}
    def p = new Person(name:"test")
    p.save()
    assertEquals false, p.deleted
    p.delete()
    assertEquals true, p.deleted
}

- 来自testBeforeDeleteOverrideBeforeDelete的输出 -

--Output from testBeforeDeleteOverrideBeforeDelete--

不要触摸我

这篇关于在grails中使用mockDomain时,如何覆盖方法的逻辑?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆