4 min lecture • Guide 605 of 877
Meilleures Pratiques de Stratégie de Test
Une stratégie de test solide attrape les bugs tôt, permet un refactoring confiant et empêche les régressions d'atteindre la production. La pyramide des tests - tests unitaires à la base, intégration au milieu, E2E au sommet - fournit le bon équilibre de vitesse et couverture. GitScrum aide les équipes à suivre les tâches de test aux côtés du travail de développement, assurant que la qualité est construite dans le processus, pas boulonnée à la fin.
Types de Tests
| Type | Vitesse | Portée | Quantité |
|---|---|---|---|
| Unitaire | Rapide | Fonction/classe unique | Beaucoup |
| Intégration | Moyen | Connexions composants | Quelques |
| E2E | Lent | Flux utilisateur complets | Peu |
| Contrat | Rapide | Frontières API | Selon besoin |
| Performance | Lent | Charge/stress | Chemins clés |
Pyramide des Tests
STRUCTURE PYRAMIDE DES TESTS
FORME PYRAMIDE:
┌─────────────────────────────────────────────────┐
│ │
│ ┌─────────┐ │
│ │ E2E │ Peu, lent, critique │
│ ┌──┴─────────┴──┐ │
│ │ Intégration │ Quelques, modéré │
│ ┌──┴───────────────┴──┐ │
│ │ Unitaire │ Beaucoup, rapide│
│ └─────────────────────┘ │
│ │
│ Bon équilibre: │
│ ├── 70% tests unitaires │
│ ├── 20% tests d'intégration │
│ └── 10% tests E2E │
└─────────────────────────────────────────────────┘
ANTI-PATTERN - CORNET DE GLACE:
┌─────────────────────────────────────────────────┐
│ ┌─────────────────────┐ │
│ │ Tests manuels │ │
│ └───────┬─────────────┘ │
│ ┌────┴────┐ │
│ │ E2E │ Trop de E2E │
│ └────┬────┘ │
│ ┌─────┴─────┐ │
│ │Intégration│ │
│ └─────┬─────┘ │
│ ┌───┴───┐ │
│ │Unitaire│ Trop peu d'unitaires │
│ └───────┘ │
│ │
│ Problèmes: CI lent, tests fragiles, long feedback│
└─────────────────────────────────────────────────┘
Tests Unitaires
STRATÉGIE TESTS UNITAIRES
QUOI TESTER EN UNITAIRE:
┌─────────────────────────────────────────────────┐
│ Haute priorité: │
│ ├── Logique métier │
│ ├── Calculs complexes │
│ ├── Transitions d'état │
│ ├── Cas limites │
│ ├── Gestion erreurs │
│ └── Fonctions utilitaires │
│ │
│ Basse priorité: │
│ ├── Getters/setters simples │
│ ├── Boilerplate framework │
│ └── Wrappers librairies tierces │
└─────────────────────────────────────────────────┘
PRINCIPES TESTS UNITAIRES:
┌─────────────────────────────────────────────────┐
│ FIRST: │
│ ├── Fast: Millisecondes, pas secondes │
│ ├── Isolated: Pas dépendances externes │
│ ├── Repeatable: Même résultat chaque fois │
│ ├── Self-validating: Passe/échoue clair │
│ └── Timely: Écrits avec ou avant le code │
│ │
│ Pattern AAA: │
│ ├── Arrange: Configurer données de test │
│ ├── Act: Exécuter la fonction │
│ └── Assert: Vérifier le résultat │
└─────────────────────────────────────────────────┘
BON EXEMPLE TEST UNITAIRE:
┌─────────────────────────────────────────────────┐
│ describe('calculateDiscount', () => { │
│ it('applique remise 10% pour commandes>100€',│
│ () => { │
│ // Arrange │
│ const order = { total: 150 }; │
│ │
│ // Act │
│ const result = calculateDiscount(order); │
│ │
│ // Assert │
│ expect(result).toBe(15); │
│ }); │
│ │
│ it('retourne 0 pour commandes <= 100€', () =>│
│ const order = { total: 100 }; │
│ expect(calculateDiscount(order)).toBe(0); │
│ }); │
│ }); │
└─────────────────────────────────────────────────┘