首頁 > Java > java教程 > 為什麼我的 DateTimeFormatterBuilder 單元測試失敗,但運行時可以使用相同的輸入字串?

為什麼我的 DateTimeFormatterBuilder 單元測試失敗,但運行時可以使用相同的輸入字串?

Susan Sarandon
發布: 2024-11-28 13:35:12
原創
250 人瀏覽過

Why Does My DateTimeFormatterBuilder Unit Test Fail, But Runtime Works with the Same Input String?

DateTimeFormatterBuilder 在測試環境中失敗

問題:

使用相同的輸入字串,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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板