我在metaClass实例afterInsert
hasProperty("auditable")
def injectMethod(object) {
if(object.hasProperty("auditable") {
object.metaClass.afterInsert = { doSomething }
}
}
如何测试object
是否响应afterInsert
?
我试过了:
assert object.respondsTo("afterInsert")
和
assert object.hasProperty("afterInsert")
没有
assert object.metaClass.afterInsert != null // Always true
答案 0 :(得分:2)
metaClass.respondsTo
?
class A {
def foo
}
a = new A()
assert a.hasProperty("foo")
assert !a.metaClass.respondsTo(a, "bar")
a.metaClass.bar = { 10 }
assert a.hasProperty("foo")
assert a.metaClass.respondsTo(a, "bar")
assert a.bar() == 10
答案 1 :(得分:2)
考虑断言如下w.r.t示例:
assert object.metaClass.respondsTo(object, "afterInsert")
assert !object.metaClass.respondsTo(object, "beforeInsert")
假设object
是Grails Domain类。如果object
是基础POGO,hasProperty
的签名可能与respondsTo
的签名类似。