ホームページ > Java > &#&チュートリアル > `java.time.DateTimeFormatterBuilder` が JUnit テストでは失敗するのに、実行時には動作するのはなぜですか?

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

Mary-Kate Olsen
リリース: 2024-11-27 18:43:11
オリジナル
845 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート