Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查是否违反了特定约束_Java_Validation_Hibernate Validator - Fatal编程技术网

Java 检查是否违反了特定约束

Java 检查是否违反了特定约束,java,validation,hibernate-validator,Java,Validation,Hibernate Validator,我有一个Spring项目,我使用hibernate validator,还有一个Junit测试类,它使用以下代码: Set<ConstraintViolation<Rule>> constraintViolations = validator.validateProperty(myObject, "query"); assertEquals(1, constraintViolations.size()); Set constraintViolations=valid

我有一个Spring项目,我使用hibernate validator,还有一个Junit测试类,它使用以下代码:

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

assertEquals(1, constraintViolations.size());
Set constraintViolations=validator.validateProperty(myObject,“查询”);
assertEquals(1,constraintViolations.size());
然而,我发现这不是一个好的测试方法。我有一个
NotBlank
注释,该测试类检查它是否工作。但是,如果我放置了任何违反
constraintViolations.size()
之外的约束,则该约束将为
2

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

您可以使用:

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;
}
assertTrue(isExpectedConstraintViolated(NotBlank.class,constraintViolations))
公共布尔值isExpectedConstraintViolated(类clazz,集constraintViolations){
对于(约束冲突违例:约束冲突){
if(clazz.equals(violaton.getConstraintDescriptor().getAnnotation().annotationType()){
返回true;
}
}
返回false;
}
应该做这项工作。

您可以使用:

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;
}
assertTrue(isExpectedConstraintViolated(NotBlank.class,constraintViolations))
公共布尔值isExpectedConstraintViolated(类clazz,集constraintViolations){
对于(约束冲突违例:约束冲突){
if(clazz.equals(violaton.getConstraintDescriptor().getAnnotation().annotationType()){
返回true;
}
}
返回false;
}

应该执行这项工作。

不,这两个词都有,你可以通过添加第二个注释来轻松地测试它,例如NobBand,如果你能帮助我,你可以考虑接受我的答案:“不,它将保存它们两个,你可以通过添加第二个注释来简单地测试它,例如NobBand and nnull,你可以考虑接受我的答案,如果它对你有帮助的话: