Glossaire · Fondamentaux du test
Test d’intégration
En anglais : Integration test
Également appelé : tests d’intégration, integration testing
Définition
Un test qui vérifie que deux composants ou plus, comme un service et sa base de données ou deux API, fonctionnent correctement ensemble via leurs vraies interfaces.
Un test d’intégration vérifie les connexions entre composants plutôt que la logique interne d’un seul. Il utilise de vraies implémentations sur au moins une frontière : un repository face à une vraie base de données, un service qui appelle l’API d’un autre service, un producteur de messages et son consommateur. Ce sont ces tests qui détectent un SQL erroné, une mauvaise sérialisation, une configuration manquante ou des contrats incompatibles, autant de problèmes que des tests unitaires avec des mocks manqueraient.
Exemple
Un OrderRepository est testé unitairement avec des mocks, et ces tests passent. Le test d’intégration l’exécute contre une vraie instance PostgreSQL lancée dans un conteneur :
- Démarrer PostgreSQL avec Testcontainers et appliquer les migrations du schéma.
- Enregistrer une commande avec trois lignes via le repository.
- La relire par son identifiant et vérifier que les totaux et les lignes correspondent.
- Rechercher les commandes sur une plage de dates et vérifier que les bornes sont incluses.
Exécuté contre une vraie base de données, ce test peut révéler une faute de frappe dans un nom de colonne, une migration jamais appliquée, une erreur de conversion de fuseau horaire, ou une requête qui fonctionne dans une base en mémoire mais pas dans PostgreSQL.
Intégration, unitaire et end-to-end
| Unitaire | Intégration | End-to-end | |
|---|---|---|---|
| Périmètre | Une fonction ou une classe | Quelques composants et leurs interfaces | Le système entier, du point de vue de l’utilisateur |
| Dépendances | Remplacées par des doublures | Réelles à la frontière testée | Toutes réelles |
| Vitesse | Millisecondes | Secondes | De quelques secondes à quelques minutes |
| Un échec désigne | Un élément de logique précis | Une interface précise | Un endroit quelconque du système |
Approches
- Les tests d’intégration étroits vérifient une frontière à la fois (service plus base de données), tout le reste étant simulé par des stubs. Ils sont rapides et précis, et la plupart des équipes en veulent beaucoup.
- Les tests d’intégration larges démarrent plusieurs vrais services ensemble. Ils inspirent davantage confiance mais sont plus lents et plus difficiles à diagnostiquer.
- Les manuels classiques décrivent aussi l’intégration big-bang, descendante (top-down) et ascendante (bottom-up), qui désignent l’ordre dans lequel les modules sont assemblés. En entretien, il est utile de connaître ces termes, mais les équipes modernes intègrent surtout en continu.
Erreurs courantes
- Partager une seule base de données de longue durée entre les tests et les développeurs, ce qui rend les résultats dépendants de données résiduelles. Donnez à chaque exécution une instance propre et jetable.
- Mocker précisément la frontière que vous vouliez tester, ce qui retransforme le test d’intégration en test unitaire.