Problème :
Un test unitaire pour DateTimeFormatterBuilder échoue avec la même chaîne d'entrée qui fonctionne au moment de l'exécution. La valeur de chaîne testée est "25-May-2018 11:10".
Méthode testée :
public void getTimeDifference(@RequestParam String startDate, @RequestParam String endDate) { DateTimeFormatter DATE_TIME_FORMAT = new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("dd-MMM-yyyy HH:mm").toFormatter(); LocalDateTime.parse(startDate,DATE_TIME_FORMAT); return messages; }
Test Méthode :
@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]); }
Enquête :
Solution :
Le problème survient en raison de l'utilisation des paramètres régionaux par défaut de la JVM pour analyser le nom du mois dans la chaîne. Pour le résoudre, spécifiez les paramètres régionaux Locale.ENGLISH lors de la création du formateur.
DateTimeFormatter DATE_TIME_FORMAT = new DateTimeFormatterBuilder() .parseCaseInsensitive() .appendPattern("dd-MMM-yyyy HH:mm") .toFormatter(Locale.ENGLISH);
En définissant explicitement les paramètres régionaux, le formateur garantit une analyse cohérente quelles que soient les paramètres régionaux par défaut de la JVM, résolvant ainsi le problème dans l'environnement de test.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!