eadl:bloc3:dev_av:tests:unit

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
eadl:bloc3:dev_av:tests:unit [2025/09/17 01:02] – [Tests unitaires] jcheroneadl:bloc3:dev_av:tests:unit [2025/09/17 15:38] (Version actuelle) – [Tests unitaires] jcheron
Ligne 1: Ligne 1:
 ====== Tests unitaires ====== ====== Tests unitaires ======
  
-On utilise souvent la matrice **Given-When-Then**.+On utilise souvent la matrice **Given-When-Then** (Structure AAA) : 
 + 
 +<sxh java;gutter:false> 
 +// Given (Arrange) - Préparer les données 
 +// When (Act) - Exécuter l'action  
 +// Then (Assert) - Vérifier le résultat 
 +</sxh>
  
 On isole le service à tester en utilisant des Mock objects (objets factices). On isole le service à tester en utilisant des Mock objects (objets factices).
Ligne 13: Ligne 19:
  
   * ''verify()'' : "Le service a-t-il bien appelé cette méthode ?"   * ''verify()'' : "Le service a-t-il bien appelé cette méthode ?"
-  * ''verifyNoInteractions()'' : "Le service n'a-t-il PAS touché ce repository ?"+  * ''verifyNoInteractions()'' : "Le service n'a-t-il pas touché ce repository ?"
  
 **Exemple :** **Exemple :**
  
 Si la catégorie n'existe pas → le service ne doit PAS essayer de sauver le produit ! Si la catégorie n'existe pas → le service ne doit PAS essayer de sauver le produit !
 +
 +===== Bonnes pratiques =====
 +  * 1 test = 1 comportement
 +  * Noms explicites (should create product when category exists)
 +  * Tests indépendants (pas d'ordre)
 +  * Données de test isolées
 +  * Given-When-Then structure
 +=== FIRST ===
 +
 +== Fast ==
 +Feeback rapide après lancement de la suite
 +
 +== Independant ==
 +Ne pas faire dépendre un test du résultat d'autres tests, ni de l'environnement
 +
 +== Repeatable ==
 +Un test doit toujours produire le même résultat, prédictible
 +
 +== Self-validating ==
 +Doit être autonome pour déterminer la validité de son résultat
 +
 +== Timely ==
 +Fait au bon moment (avant l'écriture du code de prod dans l'idéal)
 +
 +
 +===== Ressources =====
 +
 +==== Annotations Spring/Mockito ====
 +
 +<sxh java;gutter:false>
 +@ExtendWith(MockitoExtension::class)  // Pour tests unitaires
 +@SpringBootTest                       // Application complète
 +@WebMvcTest(Controller::class)        // Tests controllers
 +@DataJpaTest                         // Tests repositories
 +@Mock                                // Faux objet
 +@MockBean                           // Mock dans contexte Spring
 +@InjectMocks                        // Vraie instance avec mocks injectés
 +</sxh>
 +
 +==== Mocking concepts ====
 +
 +  * **when().thenReturn()** : Programmer les réponses
 +  * **verify()** : Vérifier les appels
 +  * **verifyNoInteractions()** : Aucune interaction
 +  * **any()** : Matcher générique
 +
 +==== Assertions usuelles ====
 +
 +<sxh java;gutter:false>
 +assertThat(result).isNotNull()
 +assertThat(result.name).isEqualTo("expected")
 +assertThat(result.price).isEqualByComparingTo(BigDecimal("10.50"))
 +assertThatThrownBy { ... }.isInstanceOf(Exception::class.java)
 +</sxh>
 +
 ===== Exemple de test ===== ===== Exemple de test =====
  
  • eadl/bloc3/dev_av/tests/unit.1758063738.txt.gz
  • Dernière modification : il y a 20 heures
  • de jcheron