اختبار التكامل في Swift باستخدام Docker: دليل شامل
اختبار التكامل هو مرحلة أساسية في تطوير تطبيقات Swift عالية الجودة. فهو يتحقق من كيفية تفاعل الوحدات المختلفة والخدمات والتبعيات الخارجية مع بعضها البعض. يعمل Docker على تبسيط هذه العملية من خلال توفير بيئة معزولة يمكن إعادة إنتاجها بسهولة على أي جهاز. في هذه المقالة، سننظر في كيفية إعداد اختبار التكامل لمشروع Swift باستخدام Docker، بما في ذلك أمثلة لنظامي iOS و macOS.
لماذا استخدام Docker لاختبار التكامل في Swift؟
غالباً ما يعاني الاختبار التقليدي لتطبيقات Swift من مشاكل تتعلق بالبيئة: إصدارات مختلفة من قواعد البيانات والخوادم والمكتبات. يحل Docker هذه المشاكل:
- العزل: يتم تشغيل كل اختبار في حاوية نظيفة، مما يلغي تأثير العمليات الأخرى.
- قابلية إعادة الإنتاج: بيئة متطابقة محلياً، على خادم CI، وعند المطورين الآخرين.
- النشر السريع: يتم تشغيل الحاويات في ثوانٍ، وليس دقائق.
- قابلية التوسع: سهولة تشغيل اختبارات متوازية بإصدارات مختلفة من التبعيات.
Docker مفيد بشكل خاص لاختبار التفاعلات الشبكية، وقواعد البيانات (مثل PostgreSQL أو Redis)، وهندسة الخدمات المصغرة.
إعداد بيئة Docker لـ Swift
للبدء، سنقوم بإنشاء مشروع 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. Dockerfile لـ Swift
أنشئ ملف 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:
المدونات
توصيات الكتب
اقرأ أيضًا