首页 > Java > java教程 > 为什么我的 DateTimeFormatterBuilder 单元测试失败,但运行时可以使用相同的输入字符串?

为什么我的 DateTimeFormatterBuilder 单元测试失败,但运行时可以使用相同的输入字符串?

Susan Sarandon
发布: 2024-11-28 13:35:12
原创
247 人浏览过

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

DateTimeFormatterBuilder 在测试环境中失败

问题:

使用相同的输入字符串,DateTimeFormatterBuilder 的单元测试失败在运行时。被测试的字符串值为“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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板