【发布时间】:2016-01-14 19:34:39
【问题描述】:
有一个包含静态属性的域:
public static fieldNames = ['fieldName','fieldName2']
代码是:
def fieldNamesProperty = grailsApplication.getDomainClass("domainPackage....domain").getPropertyValue('fieldNames')
if(fieldNamesProperty){
// do something
} else{
// do something
}
在 spock 测试中,我想测试 else 部分,但我不能直接更改域,所以我想使用元类从域名中删除 fieldNames 属性或将其设置为 null 仅用于测试。可能吗 ?我知道如何使用元类覆盖方法,但不知道删除/覆盖属性。
更新:
DomainClass.metaClass.static.getFieldNames = { ['category'] }
def fieldNameProperty = grailsApplication.getDomainClass("...DomainClass").getPropertyValue('fieldNames')
返回空值
也试过了:
DomainClass.metaClass.getFieldNames = { ['category'] }
DomainClass className = new DomainClass()
println className.fieldNames
抛出missingPropertyException
也试过不使用 .static。
【问题讨论】:
标签: grails groovy metaprogramming