ホームページ  >  記事  >  Java  >  `java.time.DateTimeFormatterBuilder` が JUnit テストでは失敗するのに、実行時には動作するのはなぜですか?

`java.time.DateTimeFormatterBuilder` が JUnit テストでは失敗するのに、実行時には動作するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-27 18:43:11783ブラウズ

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

java.time.DateTimeFormatterBuilder がテスト中に失敗する

実行時、特定のパターンを解析するための java.time.DateTimeFormatterBuilder の適用は問題なく機能します。ただし、同じ入力文字列値を使用して JUnit テストで同じ操作を実行すると、エラーが発生します。

テスト ケースの詳細

  • Expected結果: 入力文字列を指定すると、計算された時差「06:00」 startDate と endDate の両方が「25-May-2018 11:10」です。
  • 実際の結果: 指定されたパターンで 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();

エラーが発生しました

テストは失敗します実行中に機能するのと同じ入力文字列値を使用します。 runtime.

解像度

入力文字列の月名は英語です。一貫性を確保するには、フォーマッタの作成時に特定のロケール (この場合は Locale.ENGLISH) を設定する必要があります。

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

ロケールを明示的に設定することにより、フォーマッタは、 JVM のデフォルトのロケール。実行時とテスト時の動作の不一致を解決します。

以上が`java.time.DateTimeFormatterBuilder` が JUnit テストでは失敗するのに、実行時には動作するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。