Testes de Integração Swift com Docker: Guia Completo
Testes de integração são uma etapa fundamental no desenvolvimento de aplicações Swift de qualidade. Eles verificam como diferentes módulos, serviços e dependências externas interagem entre si. O Docker simplifica esse processo, fornecendo um ambiente isolado que pode ser facilmente reproduzido em qualquer máquina. Neste artigo, veremos como configurar testes de integração para um projeto Swift usando Docker, incluindo exemplos para iOS e macOS.
Por que usar Docker para testes de integração Swift?
Os testes tradicionais de aplicações Swift frequentemente sofrem com problemas de ambiente: diferentes versões de bancos de dados, servidores e bibliotecas. O Docker resolve esses problemas:
- Isolamento: cada teste é executado em um contêiner limpo, eliminando a influência de outros processos.
- Reprodutibilidade: o mesmo ambiente localmente, no servidor de CI e para outros desenvolvedores.
- Implantação rápida: contêineres são iniciados em segundos, não em minutos.
- Escalabilidade: é fácil executar testes paralelos com diferentes versões de dependências.
O Docker é especialmente útil para testar interações de rede, bancos de dados (por exemplo, PostgreSQL ou Redis) e arquiteturas de microsserviços.
Configuração do ambiente Docker para Swift
Para começar, vamos criar um projeto Swift simples e configurar o Docker. Suponha que temos uma aplicação que funciona com um banco de dados PostgreSQL.
1. Criação do projeto Swift
Crie um novo projeto usando o Swift Package Manager:
mkdir SwiftIntegrationTestcd SwiftIntegrationTestswift package init --type executableAdicione a dependência para trabalhar com PostgreSQL. Abra o arquivo Package.swift e adicione:
// 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
Crie um arquivo Dockerfile na raiz do projeto:
FROM swift:5.9-focal
WORKDIR /app
# Copia os arquivos do projetoCOPY Package.swift .COPY Sources/ ./Sources/COPY Tests/ ./Tests/
# Compila o projeto (sem testes, para acelerar)RUN swift build -c release
# Comando para executar os testesCMD ["swift", "test", "--enable-test-discovery"]3. Docker Compose para dependências
Crie um arquivo docker-compose.yml para executar os testes com 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: testpassEscrevendo testes de integração em Swift
Agora vamos escrever um teste que verifica a conexão com o banco de dados e a execução de uma consulta.
1. Classe para trabalhar com o banco de dados
Crie o arquivo Sources/SwiftIntegrationTest/DatabaseService.swift:
Blogs
Book Recommendations
Leia também
Removendo chave de map em Go: o que acontece internamente?
Múltiplas variáveis no let em Kotlin: 3 maneiras elegantes
Documentação de projeto PHP: guia completo para escrever
Segurança de aplicações C#: top 10 vulnerabilidades para iniciantes
Como obter extensão de arquivo em PHP: melhores práticas 2025