首页 >Java >java教程 >为什么我的'java.time.DateTimeFormatterBuilder”在 JUnit 测试中失败,但在运行时正常?

为什么我的'java.time.DateTimeFormatterBuilder”在 JUnit 测试中失败,但在运行时正常?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-27 18:43:11808浏览

Why Does My `java.time.DateTimeFormatterBuilder` Fail in JUnit Tests But Work During Runtime?

java.time.DateTimeFormatterBuilder 在测试期间失败

在运行时,应用 java.time.DateTimeFormatterBuilder 解析特定模式可以完美地工作。但是,当使用相同的输入字符串值在 JUnit 测试中执行相同的操作时,会发生错误。

测试用例详细信息

  • 预期结果: 当提供输入字符串“25-May-2018”时,计算出的时间差为“06:00” 11:10" 对于 startDate 和 endDate。
  • 实际结果:使用 DateTimeFormatterBuilder 和提供的模式解析 startDate 时发生错误。

代码片段

@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]);
}

解析方法在 DateTimeFormatterBuilder 中使用以下模式:

new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("dd-MMM-yyyy HH:mm").toFormatter();

遇到错误

测试失败具有相同的输入字符串值

分辨率

输入字符串中的月份名称为英文。为了确保一致性,在创建格式化程序时必须设置特定的语言环境(在本例中为 Locale.ENGLISH)。

new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("dd-MMM-yyyy HH:mm").toFormatter(Locale.ENGLISH);

通过显式设置语言环境,格式化程序可以一致地解析输入字符串,而不管输入字符串如何JVM 的默认区域设置,解决运行时和测试时行为之间的差异。

以上是为什么我的'java.time.DateTimeFormatterBuilder”在 JUnit 测试中失败,但在运行时正常?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn