2
我想在JUnit測試中驗證使用bean驗證的實體。設置似乎好,但測試不會因爲它應該失敗。因此,它看起來像實體未被正確驗證。如何在JUnit中正確使用bean驗證(JSR-303)?
這裏的相關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
的一個實例。
「可選地考慮創建DDL語句時的約束條件」......真的,我認爲這是強制性的。否則對我沒有意義。 –
「Bean驗證不考慮JPA實體(或默認列大小)」......嗯,好吧,這意味着只有數據庫才能檢測到大小約束違規,而不是驗證器。 –