Ce programme est une imitation d'un hippodrome

Pour commencer, comme dans le projet précédent, faites-vous un fork depuis le dépôt : https://github.com/CodeGymCC/hippodrome , et clonez ce fork vous-même.

Votre tâche consiste à ajouter les tests et la journalisation.

Liste des tests requis

Dans la liste suivante, chaque élément doit être mis en œuvre en tant que méthode de test distincte. Lorsque vous proposez des noms pour les méthodes de test, essayez d'être concis, mais en même temps, afin que vous puissiez comprendre approximativement ce qui est exactement testé dans celles-ci. Par exemple, comparez ces deux résultats de test :

Dans le second cas, il est plus difficile de comprendre quel type de tests n'a pas réussi et vous devrez consulter les journaux.

1. Classe cheval :

  1. constructeur
    • Vérifiez que lorsqu'il est passé au constructeur en tant que premier paramètre IllegalArgumentException, sera lancé null. Pour cela, utilisez la méthode assertThrows;
    • Vérifiez que lorsqu'elle est transmise au constructeur en tant que premier paramètre null, l'exception levée contiendra le message "Le nom ne peut pas être nul.". Pour ce faire, vous devez obtenir un message de l'exception interceptée et utiliser le assertEquals;
    • Vérifiez que lors du passage d'une chaîne vide ou d'une chaîne contenant uniquement des caractères d'espacement (espace, tabulation, etc.) comme premier paramètre au constructeur, IllegalArgumentException. Pour tester avec différentes variantes de caractères d'espacement, vous devez paramétrer le test ;
    • Vérifiez que lors du passage d'une chaîne vide ou d'une chaîne contenant uniquement des caractères d'espacement (espace, tabulation, etc.) au constructeur en tant que premier paramètre, l'exception levée contiendra le message "Le nom ne peut pas être vide.";
    • Vérifiez que lorsqu'un nombre négatif est passé au constructeur comme second paramètre, IllegalArgumentException;
    • Vérifiez que lorsqu'un nombre négatif est passé au constructeur en tant que deuxième paramètre, l'exception levée contiendra le message "La vitesse ne peut pas être négative.";
    • Vérifiez que lorsqu'un nombre négatif est passé au constructeur comme troisième paramètre, IllegalArgumentException;
    • Vérifiez que lors du passage d'un nombre négatif comme troisième paramètre au constructeur, l'exception levée contiendra le message "La distance ne peut pas être négative.";
  2. Méthode getNamegetName method
    • Vérifiez que la méthode renvoie la chaîne qui a été transmise en tant que premier paramètre au constructeur ;
  3. méthode getSpeed
    • Vérifiez que la méthode renvoie le nombre qui a été passé comme second paramètre au constructeur ;
  4. Méthode getDistancegetDistance method
    • Vérifiez que la méthode renvoie le nombre qui a été passé comme troisième paramètre au constructeur ;
    • Vérifiez que la méthode renvoie zéro si l'objet a été créé à l'aide d'un constructeur à deux paramètres ;
  5. méthode de déplacement
    • Vérifiez que la méthode appelle à l'intérieur de la méthode getRandomDoubleavec les paramètres 0.2 et 0.9. Pour ce faire, vous devez utiliser MockedStaticsa méthode verify;
    • Vérifiez que la méthode affecte la valeur de distance calculée par la formule : distance + speed * getRandomDouble(0.2, 0.9). Pour ce faire, vous devez le verrouiller getRandomDoubleafin qu'il renvoie certaines valeurs que vous devez définir en paramétrant le test.

2. Classe Hippodrome :

  1. Constructeur
    • Vérifiez que lorsqu'il est passé au constructeur IllegalArgumentException, ; sera lancé null;
    • Vérifiez que lorsqu'elle est transmise au constructeur null, l'exception levée contiendra le message "Les chevaux ne peuvent pas être nuls.";
    • Vérifiez que lors du passage d'une liste vide au constructeur, ; sera lancé IllegalArgumentException;
    • Vérifiez que lors du passage d'une liste vide au constructeur, l'exception levée contiendra le message "Les chevaux ne peuvent pas être vides.";
  2. méthode getHorsesgetHorses method
    • Vérifiez que la méthode renvoie une liste contenant les mêmes objets et dans le même ordre que la liste passée au constructeur. Lors de la création de l' objet Hippodrome , passez une liste de 30 chevaux différents au constructeur ;
  3. méthode de déplacement
    • Vérifiez que la méthode appelle la méthode move sur tous les chevaux. Lors de la création de l'objet Hippodrome, transmettez une liste de 50 chevaux fictifs au constructeur et utilisez l'extension verify.
  4. Méthode getWinner
    • Vérifiez que la méthode renvoie le cheval avec la plus grande valeur de distance.

3. Classe principale

  1. méthode principale
    • Vérifiez que la méthode n'est pas exécutée plus de 22 secondes. Pour ce faire, utilisez l'annotation Timeout. Après avoir écrit ce test, désactivez-le (utilisez l'annotation Disabled). Il ne faudra donc pas de temps pour exécuter tous les tests, et si nécessaire, il peut être exécuté manuellement.

Ce qui doit être enregistré

1. Classe principale :

  1. Après avoir créé l'objet hippodrome, ajoutez une entrée comme celle-ci au journal :2022-05-31 17:05:26,152 INFO Main: Start of the race. Number of participants: 7
  2. Après avoir affiché des informations sur les gagnants, ajoutez une entrée comme celle-ci au journal :2022-05-31 17:05:46,963 INFO Main: End of the race. Winner: Cherry

Classe Hippodrome :

  1. Si null a été passé au constructeur, alors avant de lancer l'exception, ajoutez une entrée comme celle-ci dans le journal :2022-05-31 17:29:30,029 ERROR Hippodrome: Horses list is null
  2. b. Si une liste vide a été transmise au constructeur, alors avant de lancer l'exception, ajoutez une entrée comme celle-ci dans le journal :2022-05-31 17:30:41,074 ERROR Hippodrome: Horses list is empty
  3. À la fin du constructeur, ajoutez une entrée comme celle-ci au journal :2022-05-31 17:05:26,152 DEBUG Hippodrome: Created a Hippodrome with [7] horses

3. Classe cheval :

  1. Si null est passé au constructeur au lieu d'un nom, alors avant de lever l'exception, ajoutez une entrée au journal comme :2022-05-31 17:34:59,483 ERROR Horse: Name is null
  2. Si le nom passé au constructeur est vide, avant de lancer l'exception, ajoutez une entrée comme celle-ci dans le journal :2022-05-31 17:36:44,196 ERROR Horse: Name is blank
  3. Si la vitesse transmise au constructeur est inférieure à zéro, alors avant de lancer l'exception, ajoutez une entrée comme celle-ci dans le journal :2022-05-31 17:40:27,267 ERROR Horse: Speed is negative
  4. Si la distance transmise au constructeur est inférieure à zéro, alors avant de lever l'exception, ajoutez une entrée comme celle-ci dans le journal :2022-05-31 17:41:21,938 ERROR Horse: Distance is negative
  5. À la fin du constructeur, ajoutez une entrée comme celle-ci au journal :2022-05-31 17:15:25,842 DEBUG Horse: Created a Horse named [Lobster] with speed [2.8]

Les journaux doivent être écrits dans le fichier hippodrome.log , qui doit se trouver à la racine du projet dans le dossier des journaux . Chaque jour, le fichier doit être renommé selon le modèle hippodrome.2021-12-31.log et un nouveau hippodrome.log doit être créé à la place . Pour ce faire, utilisez l' appender RollingFile . Dans ce cas, les fichiers de plus de 7 jours doivent être supprimés. Pour ce faire, vous pouvez utiliser une construction telle que :

<DefaultRolloverStrategy>
    <Delete>
        <IfFileName/>
        <IfLastModified/>
    </Delete>
</DefaultRolloverStrategy>

Googled quoi remplacer au lieu de trois points.😊


Analyse du projet . Regardez après avoir terminé!