使用 Docker 进行 Swift 集成测试:完整指南
集成测试是开发高质量 Swift 应用程序的关键阶段。它检查不同模块、服务和外部依赖如何相互交互。Docker 通过提供可在任何机器上轻松复现的隔离环境来简化此过程。在本文中,我们将探讨如何使用 Docker 为 Swift 项目设置集成测试,包括 iOS 和 macOS 的示例。
为什么要使用 Docker 进行 Swift 集成测试?
传统的 Swift 应用程序测试常常受困于环境问题:不同版本的数据库、服务器、库。Docker 解决了这些问题:
- 隔离性:每个测试都在干净的容器中运行,排除了其他进程的影响。
- 可复现性:在本地、CI 服务器和其他开发人员处拥有相同的环境。
- 快速部署:容器在几秒内启动,而不是几分钟。
- 可扩展性:轻松运行具有不同依赖版本的并行测试。
Docker 对于测试网络交互、数据库(例如 PostgreSQL 或 Redis)和微服务架构特别有用。
为 Swift 设置 Docker 环境
首先,让我们创建一个简单的 Swift 项目并配置 Docker。假设我们有一个与 PostgreSQL 数据库一起工作的应用程序。
1. 创建 Swift 项目
使用 Swift Package Manager 创建一个新项目:
mkdir SwiftIntegrationTestcd SwiftIntegrationTestswift package init --type executable让我们添加用于 PostgreSQL 的依赖。打开 Package.swift 并添加:
// 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. 用于 Swift 的 Dockerfile
在项目根目录创建 Dockerfile 文件:
FROM swift:5.9-focal
WORKDIR /app
# 复制项目文件COPY Package.swift .COPY Sources/ ./Sources/COPY Tests/ ./Tests/
# 构建项目(不包含测试,以加快速度)RUN swift build -c release
# 测试运行命令CMD ["swift", "test", "--enable-test-discovery"]3. 用于依赖的 Docker Compose
创建 docker-compose.yml 以使用 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: testpass编写 Swift 集成测试
现在让我们编写一个测试来检查数据库连接和查询执行。
1. 用于数据库操作的类
创建文件 Sources/SwiftIntegrationTest/DatabaseService.swift:
博客
书籍推荐
推荐阅读