Hibernate Validator 文档有一个简单的入门指南,其中概述了测试验证规则。
相关的块是
@Test
public void manufacturerIsNull() {
Car car = new Car(null, "DD-AB-123", 4);
Set<ConstraintViolation<Car>> constraintViolations =
validator.validate(car);
assertEquals(1, constraintViolations.size());
assertEquals("may not be null", constraintViolations.iterator().next().getMessage());
}
在我看来,测试 NotNull 约束是否被违反是一条相当模糊的路线。
我的简单解决方案类似于
public static <T> boolean containsConstraintViolation(
Set<ConstraintViolation<T>> violations, Class<?> constraint) {
for (ConstraintViolation<?> violation : violations) {
ConstraintDescriptor<?> descriptor = violation.getConstraintDescriptor();
if (constraint.isAssignableFrom(descriptor.getAnnotation().getClass()))
return true;
}
return false;
}
这让我可以做类似的测试
assertTrue(ValidationUtils.containsConstraintViolation(violations, NotNull.class));
但是,我确信从长远来看这将是幼稚的,并且我想知道是否没有其他库或 API 可以帮助进行单元测试约束。