变更的条件验证器

时间:2014-09-04 19:09:21

标签: unit-testing grails gorm

我在域字段上有一个使用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。这特别麻烦,因为它导致我的所有测试用例都失败了,并且似乎没有解决方法。

0 个答案:

没有答案