0

我将方法注入afterInsert到 metaClass 实例时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
4

2 回答 2

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
于 2013-09-04T17:54:47.467 回答
2

考虑如下断言:

assert object.metaClass.respondsTo(object, "afterInsert")
assert !object.metaClass.respondsTo(object, "beforeInsert")

假设object是一个 Grails 域类。如果object是基础 POGO,则 的签名hasProperty可以与 的签名类似respondsTo

于 2013-09-04T17:55:22.683 回答