Maison >Java >javaDidacticiel >Pourquoi mon « java.time.DateTimeFormatterBuilder » échoue-t-il dans les tests JUnit mais fonctionne-t-il pendant l'exécution ?
java.time.DateTimeFormatterBuilder échoue pendant les tests
Pendant l'exécution, l'application de java.time.DateTimeFormatterBuilder pour analyser un modèle spécifique fonctionne parfaitement. Cependant, lors de l'exécution de la même opération dans un test JUnit en utilisant la même valeur de chaîne d'entrée, une erreur se produit.
Détails du scénario de test
Extrait de code
@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]); }
La méthode d'analyse utilise le modèle suivant dans un DateTimeFormatterBuilder :
new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("dd-MMM-yyyy HH:mm").toFormatter();
Erreur rencontrée
Le test échoue avec la même valeur de chaîne d'entrée qui fonctionne pendant l'exécution.
Résolution
Le nom du mois dans la chaîne d'entrée est en Anglais. Pour garantir la cohérence, des paramètres régionaux spécifiques (dans ce cas, Locale.ENGLISH) doivent être définis lors de la création du formateur.
new DateTimeFormatterBuilder().parseCaseInsensitive().appendPattern("dd-MMM-yyyy HH:mm").toFormatter(Locale.ENGLISH);
En définissant explicitement les paramètres régionaux, le formateur peut analyser de manière cohérente la chaîne d'entrée, quel que soit le Paramètres régionaux par défaut de la JVM, résolvant l'écart entre le comportement à l'exécution et au moment du 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!