为了账号安全,请及时绑定邮箱和手机立即绑定

如何对 spring datetimeformat 验证进行单元测试

如何对 spring datetimeformat 验证进行单元测试

MM们 2021-07-20 17:43:58
我有一个 DTO 类,其中包含两个日期字段。两者都用@NotNull和注释@DateTimeFormat。我正在执行 TDD,我注意到我的NotNull错误消息已成功返回,但是当我在单元测试中传入一个日期时,它几乎接受任何内容,即使它与我的模式不匹配。有趣的是,当我以 thymeleaf 形式进行测试时,它可以正常工作,并返回我期望的错误消息,日期格式错误。我假设这与 spring 在我只对 DTO 进行单元测试时没有应用 DateTimeFormat 有关系,但是为什么我的 not null 会按预期工作?我在下面提供了 DTO 的代码import org.springframework.format.annotation.DateTimeFormat;import javax.validation.constraints.NotNull;import java.util.Date;public class HourTracker {@NotNull(message = "start time cannot be null")@DateTimeFormat(pattern = "hh:mma")private Date startTime;@NotNull(message = "end time cannot be null")@DateTimeFormat(pattern = "hh:mma")private Date endTime;//getters and setters}单元测试:public class HourTrackerTest {private static final String HOURS_INPUT_FORMAT = "hh:mma";private Validator validator;private HoursTracker tested;@Beforepublic void setUp() throws Exception {    tested = new HoursTracker();    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();    validator = factory.getValidator();}@Testpublic void testValidTimeInputs() throws Exception {    SimpleDateFormat timeFormatForDate = new SimpleDateFormat(HOURS_INPUT_FORMAT);    Date validTimeInput = timeFormatForDate.parse("12:30pm");    tested.setStartTime(validTimeInput);    tested.setEndTime(validTimeInput);    assertEquals("Start time was not correctly set", validTimeInput, tested.getStartTime());    assertEquals("End time was not correctly set", validTimeInput, tested.getStartTime());}@Testpublic void testNullStartTimeInputErrorMessage() throws Exception {    tested.setStartTime(null);    Set<ConstraintViolation<HoursTrackingForm>> violations = validator.validate(tested);    assertFalse("No violation occurred, expected one", violations.isEmpty());    assertEquals("Incorrect error message",            "Please enter a valid time in AM or PM",            violations.iterator().next().getMessage()    );}
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

简单的回答,您不能在 spring 容器之外测试 Spring 约束。我试图以测试我的 javax 验证的方式进行测试


查看完整回答
反对 回复 2021-07-29
  • 1 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信