Heim  >  Artikel  >  Java  >  Warum schlägt mein „java.time.DateTimeFormatterBuilder' in JUnit-Tests fehl, funktioniert aber zur Laufzeit?

Warum schlägt mein „java.time.DateTimeFormatterBuilder' in JUnit-Tests fehl, funktioniert aber zur Laufzeit?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-27 18:43:11783Durchsuche

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

java.time.DateTimeFormatterBuilder schlägt beim Testen fehl

Während der Laufzeit funktioniert die Anwendung von java.time.DateTimeFormatterBuilder zum Parsen eines bestimmten Musters einwandfrei. Wenn jedoch derselbe Vorgang in einem JUnit-Test mit demselben Eingabezeichenfolgenwert ausgeführt wird, tritt ein Fehler auf.

Testfalldetails

  • Erwartet Ergebnis: Eine berechnete Zeitdifferenz von „06:00“, wenn mit den Eingabezeichenfolgen „25.05.2018“ versehen wird 11:10" für Startdatum und Enddatum.
  • Tatsächliches Ergebnis: Beim Parsen des Startdatums mithilfe von DateTimeFormatterBuilder mit dem bereitgestellten Muster tritt ein Fehler auf.

Code-Snippet

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

Das Parsen Die Methode verwendet das folgende Muster innerhalb eines DateTimeFormatterBuilder:

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

Fehler aufgetreten

Der Test schlägt mit demselben Eingabezeichenfolgenwert fehl, der zur Laufzeit funktioniert.

Auflösung

Der Monatsname in der Eingabezeichenfolge ist in Englisch. Um die Konsistenz sicherzustellen, muss beim Erstellen des Formatierers ein bestimmtes Gebietsschema (in diesem Fall Locale.ENGLISH) festgelegt werden.

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

Durch explizites Festlegen des Gebietsschemas kann der Formatierer die Eingabezeichenfolge unabhängig von der konsistent analysieren Das Standardgebietsschema der JVM, das die Diskrepanz zwischen Laufzeit- und Testzeitverhalten auflöst.

Das obige ist der detaillierte Inhalt vonWarum schlägt mein „java.time.DateTimeFormatterBuilder' in JUnit-Tests fehl, funktioniert aber zur Laufzeit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn