gpt4 book ai didi

jpa - 如何在 JUnit 中正确使用 bean 验证 (JSR-303)?

转载 作者:行者123 更新时间:2023-12-04 05:23:18 25 4
gpt4 key购买 nike

我想在 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 的一个实例.

最佳答案

Bean 验证不考虑 JPA 实体(或默认列大小)。如果要使用 Bean Validation 来验证长度,则必须添加 @Size约束。

JPA 提供者可以选择在创建 DDL 语句时考虑约束,例如 Hibernate ORM 应该将列长度设置为 max @Size 的属性.

关于jpa - 如何在 JUnit 中正确使用 bean 验证 (JSR-303)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13477431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com