grails枚举类型验证未按预期工作

grails枚举类型验证未按预期工作,grails,enums,Grails,Enums,我有一个单元测试在违反约束的情况下失败,这是不应该的。我正在测试是否将有效枚举设置为域类的变量 我的枚举: public enum GenderPreference { M('Male'), F('Female'), A('Any') final String value GenderPreference(String value) { this.value = value } public String toStrin

我有一个单元测试在违反约束的情况下失败,这是不应该的。我正在测试是否将有效枚举设置为域类的变量

我的枚举:

public enum GenderPreference {
    M('Male'),
    F('Female'),
    A('Any')

    final String value

    GenderPreference(String value) {
        this.value = value
    }
    public String toString() {
        value
    }
    public String getKey() {
        name()
    }
    public String getValue() {
        value
    }
}
我的域名:

class Profile {
    GenderPreference genderPreference

    static constraints = {
        genderPreference (blank:true, nullable:true)
    }
}
我的单元测试:

工作正常:

def instance = new Profile(genderPreference: GenderPreference.M)
assertTrue instance.validate(['genderPreference'])
这应该失败,但不会。QQQ不是有效的枚举

instance = new Profile(genderPreference: 'QQQ')
assertFalse instance.validate(['genderPreference'])

我正在使用Grails2.2.4。我认为在旧版本中,必须在枚举的域约束中添加其他内容,但我认为这应该是可行的。缺少什么?

您可以使用inList向枚举添加约束

static constraints = {
    genderPreference blank:true, nullable:true,
                     inList: GenderPreference.values() as List
}

可以使用inList向枚举添加约束

static constraints = {
    genderPreference blank:true, nullable:true,
                     inList: GenderPreference.values() as List
}

虽然这样做有效,但这意味着我必须复制我拥有的每个枚举类的所有值。有些有10个或15个条目,而不是在约束中列出所有条目,必须有一种更简洁的方式。虽然这样做有效,但这意味着我必须为我拥有的每个枚举类复制所有值。有些有10或15个条目,而不是在约束中列出它们,必须有一种更简洁的方式。我只是复制了你的代码,测试了它,一切都按预期进行。你真的是说第二次测试应该失败还是验证应该失败?我只是复制了你的代码,测试了它,一切都按预期进行了。你的意思是第二次测试应该失败,还是验证应该失败?