【问题标题】:Checking Whether a Specific Constraint Violated or Not检查特定约束是否违反
【发布时间】:2014-03-23 18:09:27
【问题描述】:

我有一个 Spring 项目,我使用 hibernate 验证器并有一个使用以下代码的 Junit 测试类:

Set<ConstraintViolation<Rule>> constraintViolations =  validator.validateProperty(myObject, "query");

assertEquals(1, constraintViolations.size());

但是,我发现这不是一个好的测试方法。我有一个 NotBlank 注释,该测试类检查它是否有效。但是,如果我设置任何其他违反的约束,constraintViolations.size() 将是 2。

我的问题是:如何检查NotBlank 是否被违反?

【问题讨论】:

    标签: java validation hibernate-validator


    【解决方案1】:

    你可以使用:

    constraintViolation.getConstraintDescriptor().getAnnotation()
    

    获取用于产生此违规的注释类型,然后将其与您的预期进行比较。

    如果出现多次违规,您可能需要遍历集合。

    所以,最后

    assertTrue(isExpectedConstraintViolated(NotBlank.class, constraintViolations))
    
    
    
    public boolean isExpectedConstraintViolated(Class<?> clazz, Set<ConstraintViolation<Rule>> constraintViolations){
        for(ConstraintViolation<Rule> violaton: constraintViolations){
            if(clazz.equals(violaton.getConstraintDescriptor().getAnnotation().annotationType())){
                return true;
            }
        }
        return false;
    }
    

    应该做的工作。

    【讨论】:

    • 不,它会同时保存它们,您可以通过添加第二个注释来轻松测试它,例如。 NotBland 到 NotNull
    • 如果对你有帮助,你可以考虑接受我的回答:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 2011-01-11
    • 1970-01-01
    • 2014-11-27
    • 2015-08-30
    • 2014-12-09
    • 1970-01-01
    相关资源
    最近更新 更多