我在域字段上有一个使用getPersistentValue gorm方法的条件验证器。
class User {
def notNull = ConditionalValidators.teamChangeValidator.curry('team', [NOT_NULLABLE])
String team nullable: false, blank: false
String impact nullable: true, validator: notNull
}
class ConditionalValidators {
static String NOT_NULLABLE = 'notNullable'
static notNullable = { fieldValue ->
return fieldValue != null
}
static teamChangeValidator = { team, listOfConstraints, fieldValue, userInstance->
def result = true
if(userInstance[team].id != userInstance?.getPersistentValue(team)?.id) {
listOfConstraints.each { constraint ->
result &= this[constraint](fieldValue)
}
return result ?: ['teamChangeValidator', team.capitalize()]
}
}
}
但我不能再对这个Domain类进行单元测试,因为我无法模拟getPersistentValue
我试过了:
User.metaClass.static.getPersistentValue = { fieldValue ->
return null
}
并且:
User.metaClass.getPersistentValue = { fieldValue ->
return null
}
但两者都失败了。我在getPersistentValue上得到一个NullPointerException。这特别麻烦,因为它导致我的所有测试用例都失败了,并且似乎没有解决方法。