在grails中使用mockDomain时,如何覆盖方法的逻辑? [英] How can I overwrite a method's logic when using mockDomain in grails?
本文介绍了在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屋!
查看全文