java - 检查是否违反特定约束

标签 java validation hibernate-validator

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

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

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;
}

应该可以完成这项工作。

关于java - 检查是否违反特定约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21947796/

相关文章:

java - 使用EMM限制AirWatch在PlayStore上发布应用程序时收到错误

Java:来自外部 jar 的类在线程中实例化时出现 ClassNotFoundException

java - Hibernate:在 SQL Server 2008 上,列已从 datetime 更改为 datetime2。我如何更新 hibernate 配置以反射(reflect)这一点?

jquery - 使用 JQuery 验证插件获取重复的错误消息

java - Spring MVC + hibernate : data validation strategies

java - 使用 Hibernate Validator 在错误消息中包含字段名称

java - 数字格式问题,新手项目

javascript - 为什么我无法使用 jQuery 的 .keypress()、.keydown() 和 .keyup() 事件正确比较两个字符串?

asp.net-mvc - 更改数据注释中的验证消息

java - MethodValidationInterceptor 和@Validated @ModelAttribute