Pruebas de integración de Swift con Docker: guía completa
Las pruebas de integración son una etapa clave en el desarrollo de aplicaciones Swift de calidad. Verifican cómo los diferentes módulos, servicios y dependencias externas interactúan entre sí. Docker simplifica este proceso al proporcionar un entorno aislado que se puede reproducir fácilmente en cualquier máquina. En este artículo, veremos cómo configurar las pruebas de integración de un proyecto Swift utilizando Docker, incluyendo ejemplos para iOS y macOS.
¿Por qué usar Docker para las pruebas de integración de Swift?
Las pruebas tradicionales de aplicaciones Swift a menudo sufren problemas de entorno: diferentes versiones de bases de datos, servidores, bibliotecas. Docker resuelve estos problemas:
- Aislamiento: cada prueba se ejecuta en un contenedor limpio, lo que elimina la influencia de otros procesos.
- Reproducibilidad: el mismo entorno localmente, en el servidor CI y en otros desarrolladores.
- Despliegue rápido: los contenedores se inician en segundos, no en minutos.
- Escalabilidad: es fácil ejecutar pruebas paralelas con diferentes versiones de dependencias.
Docker es especialmente útil para probar interacciones de red, bases de datos (por ejemplo, PostgreSQL o Redis) y arquitecturas de microservicios.
Configuración del entorno Docker para Swift
Para empezar, crearemos un proyecto Swift simple y configuraremos Docker. Supongamos que tenemos una aplicación que funciona con una base de datos PostgreSQL.
1. Creación del proyecto Swift
Cree un nuevo proyecto usando Swift Package Manager:
mkdir SwiftIntegrationTestcd SwiftIntegrationTestswift package init --type executableAñadamos una dependencia para trabajar con PostgreSQL. Abra Package.swift y añada:
// 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 para Swift
Cree un archivo Dockerfile en la raíz del proyecto:
FROM swift:5.9-focal
WORKDIR /app
# Copiamos los archivos del proyectoCOPY Package.swift .COPY Sources/ ./Sources/COPY Tests/ ./Tests/
# Compilamos el proyecto (sin pruebas, para acelerar)RUN swift build -c release
# Comando para ejecutar las pruebasCMD ["swift", "test", "--enable-test-discovery"]3. Docker Compose para dependencias
Cree docker-compose.yml para ejecutar las pruebas con 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: testpassEscritura de pruebas de integración en Swift
Ahora escribamos una prueba que verifique la conexión a la base de datos y la ejecución de una consulta.
1. Clase para trabajar con la base de datos
Cree un archivo Sources/SwiftIntegrationTest/DatabaseService.swift:
Blogs
Book Recommendations
Leer también
Generics en Kotlin: para qué sirven y cómo usarlos
Seguridad de aplicaciones JavaScript: top-10 vulnerabilidades para principiantes
Principios SOLID en PHP: guía completa con ejemplos de código
¿Por qué las cadenas aleatorias imprimen "hello world"? Análisis y mejores prácticas de Java 2025
Aliasing estricto en C++: qué es y cómo no dispararse en el pie