Integrationstests von Swift mit Docker: Vollständige Anleitung
Integrationstests sind ein entscheidender Schritt bei der Entwicklung hochwertiger Swift-Anwendungen. Sie überprüfen, wie verschiedene Module, Dienste und externe Abhängigkeiten miteinander interagieren. Docker vereinfacht diesen Prozess, indem es eine isolierte Umgebung bereitstellt, die auf jedem Rechner einfach reproduziert werden kann. In diesem Artikel betrachten wir, wie man Integrationstests für ein Swift-Projekt mit Docker einrichtet, einschließlich Beispielen für iOS und macOS.
Warum Docker für Integrationstests von Swift verwenden?
Traditionelle Tests von Swift-Anwendungen leiden oft unter Umgebungsproblemen: verschiedene Versionen von Datenbanken, Servern, Bibliotheken. Docker löst diese Probleme:
- Isolation: Jeder Test wird in einem sauberen Container ausgeführt, was den Einfluss anderer Prozesse ausschließt.
- Reproduzierbarkeit: Gleiche Umgebung lokal, auf dem CI-Server und bei anderen Entwicklern.
- Schnelle Bereitstellung: Container starten in Sekunden, nicht Minuten.
- Skalierbarkeit: Einfaches Ausführen paralleler Tests mit verschiedenen Versionen von Abhängigkeiten.
Docker ist besonders nützlich für das Testen von Netzwerkinteraktionen, Datenbanken (z.B. PostgreSQL oder Redis) und Microservices-Architekturen.
Einrichtung der Docker-Umgebung für Swift
Zunächst erstellen wir ein einfaches Swift-Projekt und richten Docker ein. Nehmen wir an, wir haben eine Anwendung, die mit einer PostgreSQL-Datenbank arbeitet.
1. Erstellen eines Swift-Projekts
Erstellen Sie ein neues Projekt mit dem Swift Package Manager:
mkdir SwiftIntegrationTestcd SwiftIntegrationTestswift package init --type executableFügen wir eine Abhängigkeit für die Arbeit mit PostgreSQL hinzu. Öffnen Sie Package.swift und fügen Sie hinzu:
// 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 für Swift
Erstellen Sie eine Datei Dockerfile im Projektstammverzeichnis:
FROM swift:5.9-focal
WORKDIR /app
# Projektdateien kopierenCOPY Package.swift .COPY Sources/ ./Sources/COPY Tests/ ./Tests/
# Projekt bauen (ohne Tests, um zu beschleunigen)RUN swift build -c release
# Befehl zum Ausführen der TestsCMD ["swift", "test", "--enable-test-discovery"]3. Docker Compose für Abhängigkeiten
Erstellen Sie docker-compose.yml zum Ausführen der Tests mit 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: testpassSchreiben von Integrationstests in Swift
Jetzt schreiben wir einen Test, der die Datenbankverbindung und die Ausführung einer Abfrage überprüft.
1. Klasse für die Datenbankarbeit
Erstellen Sie eine Datei Sources/SwiftIntegrationTest/DatabaseService.swift:
Blogs
Buchempfehlungen
Lesen Sie auch
Default-Interface-Methoden in Android: Nougat-Fehler und seine Lösung (Kotlin)
C++ und PostgreSQL: Vollständiger Leitfaden für Entwickler
Serverless-Funktionen in Rust auf AWS Lambda: Fortgeschrittene Techniken
Algorithmen und Datenstrukturen in C++: Vollständiger Leitfaden für Anfänger
Optimierung der Leistung von C++-Anwendungen: für Anfänger