You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Validator验证VehiculeFrontDto时集合非空,测试是否有误?

问题:验证合法VehiculeFrontDto时anomalies集合不为空的原因分析

我无法理解为何使用合法的VehiculeFrontDto对象进行验证时,anomalies集合的isEmpty()方法却返回false。通过调试器查看anomalies变量,得到以下值:

interpolatedMessage: "Veuillez renseigner si votre véhicule est dérogatoire ou non." (id=344)
messageTemplate: "{vehicule.derogatoire.obligatoire}" (id=348)

运行测试时抛出错误:

org.opentest4j.AssertionFailedError: expected: true but was: false

请问这种情况下,是不是测试代码编写有误?测试代码如下:

@Test
public void testValidator() {

    VehiculeFrontDto vehiculeFrontDto = new VehiculeFrontDto();
    vehiculeFrontDto.setImmat("test");
    vehiculeFrontDto.setMarque("test2");
    vehiculeFrontDto.setModele("test3");
    vehiculeFrontDto.setDatePremiereImmat(new Date());
    vehiculeFrontDto.setSituation(SituationVehiculeEnum.CAPA.getCode());

    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    Validator validator = factory.getValidator();

    Set<ConstraintViolation<VehiculeFrontDto>> anomalies = validator.validate(vehiculeFrontDto, Default.class);
    Assertions.assertTrue(anomalies.isEmpty());
}

问题根源

测试代码本身没有语法错误,但你创建的VehiculeFrontDto对象并不满足验证规则。从调试输出的错误信息可以明确看出:验证器要求必须填写车辆是否为豁免类型(对应字段derogatoire),但你在测试代码中完全没有给这个字段赋值,导致验证失败,anomalies集合自然不为空。

解决方法

  1. 补全必填字段值:在测试代码中为derogatoire字段设置合法值,比如:
// 根据业务需求设置true或false
vehiculeFrontDto.setDerogatoire(true);
  1. 检查验证注解配置:如果认为derogatoire字段不应该是必填项,需要检查VehiculeFrontDto类中该字段的JSR-380验证注解(如@NotNull、@AssertTrue等),确认是否存在配置错误。

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:50:23