Maison >Java >javaDidacticiel >Pourquoi mon « java.time.DateTimeFormatterBuilder » échoue-t-il dans les tests JUnit mais fonctionne-t-il pendant l'exécution ?

Pourquoi mon « java.time.DateTimeFormatterBuilder » échoue-t-il dans les tests JUnit mais fonctionne-t-il pendant l'exécution ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-27 18:43:11861parcourir

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

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

  • Attendu Résultat : Un décalage horaire calculé de "06:00" lorsqu'il est fourni avec les chaînes d'entrée "25-May-2018 11:10" pour startDate et endDate.
  • Résultat réel : Une erreur se produit lors de l'analyse de startDate à l'aide de DateTimeFormatterBuilder avec le modèle fourni.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn