【发布时间】:2021-10-22 07:19:59
【问题描述】:
我对控制器有一个 json 格式的响应日期,如下所示:
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "America/Chicago")
private Date date;
所以当我发出一个 post call 时,它看起来像:
"date": "2021-08-20 14:17:43"
所以响应字符串看起来像这样{"date":"2021-05-21 14:23:44"}。在 JUnit 中,我手动创建了一个响应对象并设置了 Date 对象,因此我可以使用 Gson 将其转换为字符串,然后断言两者相等。
我试图通过尝试在我的 SpringMVC JUnit 测试用例中匹配这个:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("America/Chicago"));
String formattedDate = sdf.format(new Date());
LocalDate localDate = LocalDate.parse(formattedDate);
Date date = Date.from(localDate.atStartOfDay(ZoneId.of("America/Chicago")).toInstant());
但由于yyyy-MM-dd 和HH:mm:ss 之间的空格,解析时出错:
java.time.format.DateTimeParseException: Text '2021-08-20 14:23:44' could not be parsed, unparsed text found at index 10
我认为我这样做可能效率低下,所以我想知道是否有更简单的方法来制作与 @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "America/Chicago") 格式匹配的 Date 对象
我正在尝试匹配响应正文,以便它通过 mockito 传递。
【问题讨论】:
-
代替 SimpleDateFormat,您可以像这样使用 java.time.format.DateTimeFormatter:
String formattedDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("America/Chicago")).format(LocalDateTime.now()); -
有没有办法让它成为
Date对象?因为我需要使用 setter 来设置日期对象。 -
我建议你不要使用
Date。该课程设计不良且早已过时。而是仅使用来自java.time, the modern Java date and time API 的LocalDateTime和/或Instant。 -
您希望您的单元测试测试哪种场景?在 Java 中创建响应对象?将响应对象转换为 JSON?将 JSON 转换为 Java 对象?抱歉,不清楚。
标签: java date datetime gson java.util.date