問題:
使用相同的輸入字串,DateFormFormatterBuilder 的單元測試失敗在運行時。被測試的字串值為「25-May-2018 11:10」。
測試的方法:
public void getTimeDifference(@RequestParam String startDate, @RequestParam String endDate) { DateTimeFormatter DATE_TIME_FORMAT = new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("dd-MMM-yyyy HH:mm").toFormatter(); LocalDateTime.parse(startDate,DATE_TIME_FORMAT); return messages; }
測試方法:
@Test public void testFormat() throws Exception { final String startDateFormatA = "25-May-2018 11:10"; final String endDateFormatA = "25-May-2018 11:10"; assertEquals("06:00", callDbController.getTimeDifference(startDateFormatA, endDateFormatA)[1]); }
調查:
解決方案:
問題的出現是由於使用JVM 的預設語言環境來解析字串中的月份名稱。若要解決此問題,請在建立格式化程式時指定 Locale.ENGLISH 語言環境。
DateTimeFormatter DATE_TIME_FORMAT = new DateTimeFormatterBuilder() .parseCaseInsensitive() .appendPattern("dd-MMM-yyyy HH:mm") .toFormatter(Locale.ENGLISH);
透過明確設定語言環境,無論 JVM 預設語言環境如何,格式化程式都可以確保解析一致,從而解決了測試環境中的問題。
以上是為什麼我的 DateTimeFormatterBuilder 單元測試失敗,但運行時可以使用相同的輸入字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!