我正在编写一个测试来检查从ping数据库返回的dateTime是否是预期的格式。
我想要的格式是"dd/MM/yyyy HH: MM:ss"
我当前的代码是使用一个DateTimeFormatter定义自定义格式,它应该匹配,然后解析从ping返回的dateTime。断言assertEquals用于检查它们的格式是否相同。
然而,我得到一个异常,因为格式化程序返回不正确的格式:
java.lang.AssertionError:
Expected:2021-08-10T17:18:53
Actual:10/18/2021 17:18:53
正如你所看到的,期望的格式不是它应该是什么。
这是我当前的代码
String dateTime = JsonPath.read(res.getResponse().getContentAsString(),"$.[0].datetime");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
LocalDateTime parsedDateTime = LocalDateTime.parse(dateTime,formatter);
try {
Assert.assertEquals(parsedDateTime, dateTime);
} catch (AssertionError e){
throw e;
}
我会这样做:
private static final DateTimeFormatter PARSER
= DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss", Locale.ROOT);
@Test
public void correctFormatReceived() {
String dateTime = "10/18/2021 17:18:53"; // get from JSON
LocalDateTime.parse(dateTime, PARSER);
}
如果格式不正确,LocalDateTime.parse()
将抛出DateTimeParseException
, JUnit或您的测试运行器将随后报告。
如果您希望严格验证日期和时间值(例如,检测它们是否在非闰年发送2月29日),请在格式化程序上指定:
private static final DateTimeFormatter PARSER
= DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss", Locale.ROOT)
.withResolverStyle(ResolverStyle.STRICT);
如果您想更清楚地区分不正确的格式和无法运行到完成的测试,捕获异常并声明测试失败:
try {
LocalDateTime.parse(dateTime, PARSER);
} catch (DateTimeParseException dtpe) {
Assert.fail(dtpe.toString());
}
你的测试出了什么问题?正如其他人在评论中所说,在Java中,String
永远不可能等于LocalDateTime
。所以你的Assert.assertEquals(parsedDateTime, dateTime);
在任何情况下都会失败。此外,能够解析字符串就足以确定指定的格式是否符合预期;所以在你的测试中,你不需要测试任何等式