SuperAPI AI 工具集

unit-test-bean-validation

测试与质量

查看项目

更新于 10-16 08:48

技能介绍

用途:为 Jakarta Bean Validation(JSR-380)注解与自定义校验器提供可执行的 JUnit 5 单元测试模式,测试在隔离环境中运行,无需 Spring 上下文。

主要能力:覆盖内置约束(@NotNull、@Email、@Min、@Max、@Size)、自定义 @Constraint 实现、跨字段校验(如密码匹配)与校验分组;可验证约束违反的属性路径、消息与无效值;支持参数化测试。

使用方式:在测试作用域加入 jakarta.validation-api、hibernate-validator 与 assertj-core 依赖;在 @BeforeEach 中用 Validation.buildDefaultValidatorFactory().getValidator() 构建 Validator;先测有效对象无违反,再测无效对象并断言属性路径与消息;用 getPropertyPath()、getMessage()、getInvalidValue() 提取细节;自定义校验器与分组、参数化测试参见 references/custom-validators.md 与 references/advanced-patterns.md。

适用场景:DTO 与请求对象的校验逻辑测试、自定义 @Constraint 校验器与消息测试、跨字段与条件校验测试、不依赖 Spring Boot 的快速校验测试。

限制与注意事项:多数约束默认忽略 null,必填字段需与 @NotNull 组合;Validator 实例线程安全可共享;自定义校验器必须无状态并对 null 返回 true;嵌套对象需用 @Valid 级联校验;如涉及 i18n 需测试不同 locale;校验单元测试不应依赖 Spring 上下文或数据库。常见问题:类路径缺少依赖导致 ValidatorFactory 未找到;@Constraint(validatedBy=...) 配置错误导致自定义校验器未调用;违反数量不符时用 hasSize() 核对;属性路径错误需确认注解加在字段而非 getter 上。