检查是否违反特定约束

kam*_*aci 2 java validation hibernate-validator

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

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

assertEquals(1, constraintViolations.size());
Run Code Online (Sandbox Code Playgroud)

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

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

zib*_*ibi 5

你可以使用:

constraintViolation.getConstraintDescriptor().getAnnotation()
Run Code Online (Sandbox Code Playgroud)

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

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

所以,最后

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;
}
Run Code Online (Sandbox Code Playgroud)

应该做这项工作。