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
。