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
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!