测试是否为实例“注入”了一个闭包

时间:2013-09-04 16:34:51

标签: grails groovy

我在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

2 个答案:

答案 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的签名类似。