java-junit

Par github · awesome-copilot

Obtenez les meilleures pratiques pour les tests unitaires JUnit 5, y compris les tests pilotés par les données

npx skills add https://github.com/github/awesome-copilot --skill java-junit

Meilleures pratiques JUnit 5+

Votre objectif est de m'aider à écrire des tests unitaires efficaces avec JUnit 5, couvrant à la fois les approches de test standard et data-driven.

Configuration du projet

  • Utilisez une structure de projet Maven ou Gradle standard.
  • Placez le code source des tests dans src/test/java.
  • Incluez les dépendances pour junit-jupiter-api, junit-jupiter-engine et junit-jupiter-params pour les tests paramétrés.
  • Utilisez les commandes de l'outil de build pour exécuter les tests : mvn test ou gradle test.

Structure des tests

  • Les classes de test doivent avoir un suffixe Test, par exemple CalculatorTest pour une classe Calculator.
  • Utilisez @Test pour les méthodes de test.
  • Suivez le modèle Arrange-Act-Assert (AAA).
  • Nommez les tests en utilisant une convention descriptive, comme methodName_should_expectedBehavior_when_scenario.
  • Utilisez @BeforeEach et @AfterEach pour la configuration et le nettoyage par test.
  • Utilisez @BeforeAll et @AfterAll pour la configuration et le nettoyage par classe (doivent être des méthodes statiques).
  • Utilisez @DisplayName pour fournir un nom lisible pour les classes et méthodes de test.

Tests standard

  • Gardez les tests concentrés sur un seul comportement.
  • Évitez de tester plusieurs conditions dans une seule méthode de test.
  • Rendez les tests indépendants et idempotents (peuvent s'exécuter dans n'importe quel ordre).
  • Évitez les interdépendances entre tests.

Tests data-driven (paramétrés)

  • Utilisez @ParameterizedTest pour marquer une méthode comme test paramétré.
  • Utilisez @ValueSource pour des valeurs littérales simples (chaînes, entiers, etc.).
  • Utilisez @MethodSource pour faire référence à une méthode factory qui fournit les arguments de test sous forme de Stream, Collection, etc.
  • Utilisez @CsvSource pour des valeurs séparées par des virgules en ligne.
  • Utilisez @CsvFileSource pour utiliser un fichier CSV du classpath.
  • Utilisez @EnumSource pour utiliser des constantes enum.

Assertions

  • Utilisez les méthodes statiques de org.junit.jupiter.api.Assertions (par exemple assertEquals, assertTrue, assertNotNull).
  • Pour des assertions plus fluides et lisibles, envisagez d'utiliser une bibliothèque comme AssertJ (assertThat(...).is...).
  • Utilisez assertThrows ou assertDoesNotThrow pour tester les exceptions.
  • Groupez les assertions connexes avec assertAll pour vous assurer que toutes les assertions sont vérifiées avant l'échec du test.
  • Utilisez des messages descriptifs dans les assertions pour clarifier l'échec.

Mocking et isolation

  • Utilisez un framework de mocking comme Mockito pour créer des objets mock des dépendances.
  • Utilisez les annotations @Mock et @InjectMocks de Mockito pour simplifier la création et l'injection de mocks.
  • Utilisez des interfaces pour faciliter le mocking.

Organisation des tests

  • Groupez les tests par fonctionnalité ou composant en utilisant des packages.
  • Utilisez @Tag pour catégoriser les tests (par exemple @Tag("fast"), @Tag("integration")).
  • Utilisez @TestMethodOrder(MethodOrderer.OrderAnnotation.class) et @Order pour contrôler l'ordre d'exécution des tests si nécessaire.
  • Utilisez @Disabled pour ignorer temporairement une méthode ou une classe de test, en fournissant une raison.
  • Utilisez @Nested pour grouper les tests dans une classe interne imbriquée pour une meilleure organisation et structure.

Skills similaires