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 ===== | ||