Information sur l'article
Categorie: tests, testcontainers, docker, ecommerce, csharp
Mise à jour: 2025-08-09
Temps de lecture: 9 min

Testcontainers : des tests d’intégration fiables pour un e‑commerce
Mise à jour: 2025-08-09
Testcontainers pour l’e‑commerce
Testcontainers permet de piloter des conteneurs Docker depuis les tests. Idéal pour un e‑commerce: DB (PostgreSQL), cache (Redis), files (Kafka, RabbitMQ) démarrent à la volée, avec des données propres à chaque run, en local et en CI.
Pré‑requis
- Docker Desktop installé et lancé.
Mise en place (C# / xUnit)
Exemple minimal pour un repo de commandes: base PostgreSQL et cache Redis.
Fixture de base (PostgreSQL + Redis)
Exemple : test d’intégration OrderRepository
Test d’un repository branché sur PostgreSQL. On crée le schéma dans le test pour rester hermétique.
Cas microservice : lancer l’image du service pour tester l’intégration
On peut tester un microservice tel qu’il sera déployé en démarrant directement son image Docker, tout en branchant des dépendances réelles (ex: PostgreSQL).
Points clés:
- L’image du service est démarrée telle qu’en prod; on injecte la chaîne de connexion via variables d’environnement.
- Ici on utilise host.docker.internal + port mappé pour atteindre PostgreSQL depuis le conteneur du service (simple avec Docker Desktop/CI).
- Alternative: créer un réseau Docker et donner un alias au conteneur DB (ex: "db") puis utiliser "Host=db;Port=5432".
Dans un pipeline CI
Aucune infra partagée à préparer: les conteneurs sont éphémères, démarrés par les tests. Il suffit que l’agent CI ait accès à Docker (ou une VM runner avec Docker).
Combien de temps ça prend ?
- Projet .NET existant: 1–2 h pour une première base (DB + cache), incluant une fixture réutilisable.
- Équipe: 0,5–1 j pour évangéliser, factoriser une "test infra" propre et exemples (PostgreSQL, Redis, message broker).
- Chaque nouveau test d’intégration ensuite: quelques minutes (schéma de test + données).
Gains attendus
- Réduction massive de la flakiness (30–70%) grâce à l’isolation et des données fraîches.
- Parité local/CI: "ça marche chez moi" disparaît.
- Mise à l’échelle simple: exécutions en parallèle par collection/fixture; pas de contention sur une DB partagée.
- On teste le vrai contrat technique (driver, SQL, latences) plutôt que des mocks.
Variantes (Node, Java)
Disponible aussi pour Node (testcontainers-node) et Java (Testcontainers Java) avec une API équivalente (builders, waits, réutilisation).
Conclusion
Merci d’avoir lu cet article. Si vous avez des questions, envie d’améliorer l’exemple ou de suggérer un sujet, contactez-moi: je serai ravi d’échanger.
Sommaire
- Testcontainers pour l’e‑commerce
- Pré‑requis
- Mise en place (C# / xUnit)
- Fixture de base (PostgreSQL + Redis)
- Exemple : test d’intégration OrderRepository
- Cas microservice : lancer l’image du service pour tester l’intégration
- Dans un pipeline CI
- Combien de temps ça prend ?
- Gains attendus
- Variantes (Node, Java)
- Conclusion