Différences
Ci-dessous, les différences entre deux révisions de la page.
| 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] jcheron | eadl: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** |
| + | |||
| + | <sxh java; | ||
| + | // Given (Arrange) - Préparer les données | ||
| + | // When (Act) - Exécuter l' | ||
| + | // Then (Assert) - Vérifier le résultat | ||
| + | </ | ||
| 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: | ||
| * '' | * '' | ||
| - | * '' | + | * '' |
| **Exemple :** | **Exemple :** | ||
| Si la catégorie n' | Si la catégorie n' | ||
| + | |||
| + | ===== Bonnes pratiques ===== | ||
| + | * 1 test = 1 comportement | ||
| + | * Noms explicites (should create product when category exists) | ||
| + | * Tests indépendants (pas d' | ||
| + | * 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' | ||
| + | |||
| + | == 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' | ||
| + | |||
| + | |||
| + | ===== Ressources ===== | ||
| + | |||
| + | ==== Annotations Spring/ | ||
| + | |||
| + | <sxh java; | ||
| + | @ExtendWith(MockitoExtension:: | ||
| + | @SpringBootTest | ||
| + | @WebMvcTest(Controller:: | ||
| + | @DataJpaTest | ||
| + | @Mock // Faux objet | ||
| + | @MockBean | ||
| + | @InjectMocks | ||
| + | </ | ||
| + | |||
| + | ==== 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; | ||
| + | assertThat(result).isNotNull() | ||
| + | assertThat(result.name).isEqualTo(" | ||
| + | assertThat(result.price).isEqualByComparingTo(BigDecimal(" | ||
| + | assertThatThrownBy { ... }.isInstanceOf(Exception:: | ||
| + | </ | ||
| + | |||
| ===== Exemple de test ===== | ===== Exemple de test ===== | ||