Swift与Docker集成测试:完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

使用 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:




                
                

博客

书籍推荐