Tests d'intégration Swift avec Docker : guide complet
Les tests d'intégration sont une étape clé du développement d'applications Swift de qualité. Ils vérifient comment différents modules, services et dépendances externes interagissent entre eux. Docker simplifie ce processus en fournissant un environnement isolé, facilement reproductible sur n'importe quelle machine. Dans cet article, nous verrons comment configurer les tests d'intégration d'un projet Swift en utilisant Docker, avec des exemples pour iOS et macOS.
Pourquoi utiliser Docker pour les tests d'intégration Swift ?
Les tests traditionnels des applications Swift souffrent souvent de problèmes d'environnement : différentes versions de bases de données, de serveurs, de bibliothèques. Docker résout ces problèmes :
- Isolation : chaque test s'exécute dans un conteneur propre, ce qui élimine l'influence des autres processus.
- Reproductibilité : environnement identique en local, sur le serveur CI et chez les autres développeurs.
- Déploiement rapide : les conteneurs se lancent en quelques secondes, pas en minutes.
- Passage à l'échelle : facile d'exécuter des tests parallèles avec différentes versions de dépendances.
Docker est particulièrement utile pour tester les interactions réseau, les bases de données (par exemple PostgreSQL ou Redis) et l'architecture de microservices.
Configuration de l'environnement Docker pour Swift
Pour commencer, créons un projet Swift simple et configurons Docker. Supposons que nous ayons une application qui fonctionne avec une base de données PostgreSQL.
1. Création du projet Swift
Créez un nouveau projet avec Swift Package Manager :
mkdir SwiftIntegrationTestcd SwiftIntegrationTestswift package init --type executableAjoutons une dépendance pour travailler avec PostgreSQL. Ouvrez Package.swift et ajoutez :
// swift-tools-version:5.9import PackageDescription
let package = Package( name: "SwiftIntegrationTest", dependencies: [ .package(url: "https://github.com/vapor/postgres-nio.git", from: "1.18.0") ], targets: [ .executableTarget( name: "SwiftIntegrationTest", dependencies: [ .product(name: "PostgresNIO", package: "postgres-nio") ]), .testTarget( name: "SwiftIntegrationTestTests", dependencies: ["SwiftIntegrationTest"]) ])2. Dockerfile pour Swift
Créez un fichier Dockerfile à la racine du projet :
FROM swift:5.9-focal
WORKDIR /app
# Copie des fichiers du projetCOPY Package.swift .COPY Sources/ ./Sources/COPY Tests/ ./Tests/
# Construction du projet (sans les tests pour accélérer)RUN swift build -c release
# Commande d'exécution des testsCMD ["swift", "test", "--enable-test-discovery"]3. Docker Compose pour les dépendances
Créez docker-compose.yml pour exécuter les tests avec PostgreSQL :
version: '3.8'
services: postgres: image: postgres:16 environment: POSTGRES_DB: testdb POSTGRES_USER: testuser POSTGRES_PASSWORD: testpass ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U testuser -d testdb"] interval: 5s timeout: 5s retries: 5
swift-tests: build: . depends_on: postgres: condition: service_healthy environment: DATABASE_HOST: postgres DATABASE_PORT: 5432 DATABASE_NAME: testdb DATABASE_USER: testuser DATABASE_PASSWORD: testpassRédaction de tests d'intégration en Swift
Écrivons maintenant un test qui vérifie la connexion à la base de données et l'exécution d'une requête.
1. Classe pour travailler avec la base de données
Créez le fichier Sources/SwiftIntegrationTest/DatabaseService.swift :
Blogs
Book Recommendations
Lire aussi
Documentation en JavaScript : comment écrire un code qui parle de lui-même
Docker et Java : conteneurisation avancée d'applications
dyld: Library not loaded: @rpath/libswiftCore.dylib : comment vaincre l'erreur
Surveillance des applications Swift : métriques et alertes pour iOS/macOS
gRPC en JavaScript : quand l'utiliser et comment cela accélérera votre projet