我想像平常一样模拟一个域(mockDomain(Class)
),但我想覆盖该域的一个方法(beforeDelete
)具体),仅针对该单元测试使用自定义逻辑。
如何实现这一目标?
最佳答案
您可以使用 Groovy 元类重写域类上的 beforeDelete 方法。
域类:
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 的输出--
删除人员 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 的输出--
别碰我
关于unit-testing - 在 grails 中使用 mockDomain 时如何覆盖方法的逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5887177/