我想在 JUnit 测试中使用 bean 验证来验证实体。设置似乎很好,但测试并没有失败。因此,看起来该实体未正确验证。
这是相关的 JPA 注释:
@Column(name = "mobile_numbers", table = STN)
private String smsRecipientMobileNumbers;
该列的默认大小为 255 个字符(在数据库中正确应用)。
这是测试:
final Collection<String> recipients = new ArrayList<String>(2000);
for (int i = 0; i < 2000; i++) {
recipients.add("some mobile number");
}
objectUnderTest.setSmsRecipients(recipients);
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
violations = validator.validate(objectUnderTest, Default.class);
assertThat(violations, is(empty()));
}
我预计它会失败,因为它smsRecipientMobileNumbers
超过 255 个字符,但它通过了。
如果我在实体中明确应用大小约束,则测试失败:
@Column(name = "mobile_numbers", table = STN)
@Size(max = 255)
private String smsRecipientMobileNumbers;
我在这里做错了什么?显然,选择的提供者必须能够正确解释 JPA 注释。验证器是org.hibernate.validator.engine.ValidatorImpl
.