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:td3 [2025/10/28 20:24] – [Bonnes pratiques à retenir] jcheron | eadl:bloc3:dev_av:td3 [2025/10/29 11:31] (Version actuelle) – [2.3 Concepts clés] jcheron | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== | + | ====== 3 - Tests et CI/CD ====== |
| ===== Objectifs pédagogiques ===== | ===== Objectifs pédagogiques ===== | ||
| Ligne 15: | Ligne 15: | ||
| * Qui a terminé les associations Order/ | * Qui a terminé les associations Order/ | ||
| * Qui a résolu des problèmes N+1 ? | * Qui a résolu des problèmes N+1 ? | ||
| - | | + | * Ceux qui ont fini peuvent commencer les tests, les autres finalisent le TD2 |
| </ | </ | ||
| Ligne 25: | Ligne 25: | ||
| **Objectif :** Séparer les configurations selon l' | **Objectif :** Séparer les configurations selon l' | ||
| </ | </ | ||
| + | |||
| + | === Profiles === | ||
| + | |||
| + | La création de profiles permet de gérer des configurations différentes, | ||
| + | |||
| + | Ajouter la section **profiles** suivante au fichier **pom.xml** | ||
| + | <sxh xml; | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| === Structure des fichiers === | === Structure des fichiers === | ||
| Ligne 42: | Ligne 80: | ||
| spring.application.name=ecommerce-api | spring.application.name=ecommerce-api | ||
| server.port=8080 | server.port=8080 | ||
| + | |||
| + | # Récupération du profile Maven pour def du profile Spring | ||
| + | spring.profiles.active=@activeProfile@ | ||
| # JPA commun | # JPA commun | ||
| Ligne 124: | Ligne 165: | ||
| # Via ligne de commande | # Via ligne de commande | ||
| mvn spring-boot: | mvn spring-boot: | ||
| + | |||
| + | # Avec profil maven | ||
| + | mvn spring-boot: | ||
| </ | </ | ||
| Ligne 310: | Ligne 354: | ||
| <sxh java; | <sxh java; | ||
| + | // @ExtendWith : crée les Mocks et les injecte avant chaque test | ||
| + | @ExtendWith(MockitoExtension.class) | ||
| + | |||
| // @Mock : Crée un faux objet (ne fait rien par défaut) | // @Mock : Crée un faux objet (ne fait rien par défaut) | ||
| @Mock | @Mock | ||
| Ligne 917: | Ligne 964: | ||
| - name: Run unit tests | - name: Run unit tests | ||
| - | run: mvn clean test | + | run: mvn clean test -P test |
| - name: Upload test results | - name: Upload test results | ||
| Ligne 944: | Ligne 991: | ||
| - name: Run integration tests | - name: Run integration tests | ||
| - | run: mvn clean verify -DskipUnitTests | + | run: mvn clean verify |
| - name: Upload test results | - name: Upload test results | ||
| Ligne 971: | Ligne 1018: | ||
| - name: Generate coverage report | - name: Generate coverage report | ||
| - | run: mvn clean verify jacoco: | + | run: mvn clean verify jacoco: |
| - name: Upload coverage to Codecov | - name: Upload coverage to Codecov | ||
| Ligne 1005: | Ligne 1052: | ||
| - name: Build with Maven | - name: Build with Maven | ||
| - | run: mvn clean package -DskipTests | + | run: mvn clean package |
| - name: Upload artifact | - name: Upload artifact | ||
| Ligne 1114: | Ligne 1161: | ||
| # Lancer l'app en mode test | # Lancer l'app en mode test | ||
| mvn spring-boot: | mvn spring-boot: | ||
| + | |||
| + | mvn spring-boot: | ||
| Ligne 1196: | Ligne 1245: | ||
| ^ Aspect ^ Test Unitaire ^ Test d' | ^ Aspect ^ Test Unitaire ^ Test d' | ||
| - | | **Vitesse** | ⚡ Très rapide (<10ms) | 🐌 Plus lent (100-500ms) | | + | | **Vitesse** | Très rapide (<10ms) | Plus lent (100-500ms) | |
| | **Base de données** | ❌ Non (mocks) | ✅ Oui (H2 en mémoire) | | | **Base de données** | ❌ Non (mocks) | ✅ Oui (H2 en mémoire) | | ||
| | **Contexte Spring** | ❌ Non | ✅ Oui (toute l'app) | | | **Contexte Spring** | ❌ Non | ✅ Oui (toute l'app) | | ||