Unit Test cho thư viện CocoaPods bằng Podspec

Trong bài viết này, bạn sẽ học cách tạo một thư viện CocoaPods, cấu hình Unit Test sử dụng podspec, cách tích hợp vào dự án chính, và cách chạy Unit Test trên cả máy ảomáy thật.

1. Khởi tạo dự án thư viện với CocoaPods

Đầu tiên, chúng ta sẽ tạo một thư viện mới bằng lệnh pod lib create, và sau đó thêm Unit Test.

Bước 1: Cài đặt CocoaPods

Nếu chưa cài đặt CocoaPods, bạn có thể cài đặt nó thông qua RubyGems:

sudo gem install cocoapods

Bước 2: Khởi tạo thư viện với lệnh pod lib create

Lệnh này sẽ giúp bạn tạo cấu trúc dự án cho thư viện mới:

pod lib create MyLibrary

Trong quá trình này, CocoaPods sẽ hỏi một số câu hỏi như sau:

  1. What language do you want to use? Chọn Swift.
  2. Would you like to include a demo application with your library? Chọn Yes để tạo một ứng dụng ví dụ.
  3. Which testing frameworks will you use? Chọn QuickNimble để cài đặt hai framework hỗ trợ viết test.
  4. Các câu hỏi khác, bạn có thể để mặc định hoặc điều chỉnh theo ý thích.

Kết quả, CocoaPods sẽ tạo một dự án với cấu trúc thư mục như sau:

MyLibrary/
├── Example/            # Ứng dụng ví dụ để test thư viện
├── MyLibrary/          # Mã nguồn của thư viện
├── MyLibrary.podspec   # File podspec để cấu hình
├── MyLibraryTests/     # Thư mục chứa test case
└── README.md

2. Cấu hình Podspec để hỗ trợ Unit Test

File podspec đóng vai trò quan trọng trong việc cấu hình thư viện và test. Mở file MyLibrary.podspec và cập nhật như sau:

Pod::Spec.new do |spec|
  spec.name         = 'MyLibrary'
  spec.version      = '0.1.0'
  spec.summary      = 'A simple Swift library.'
  spec.homepage     = 'https://github.com/yourusername/MyLibrary'
  spec.license      = { :type => 'MIT', :file => 'LICENSE' }
  spec.author       = { 'YourName' => '[email protected]' }
  spec.source       = { :git => 'https://github.com/yourusername/MyLibrary.git', :tag => spec.version.to_s }

  # Cấu hình các file mã nguồn chính của thư viện
  spec.source_files = 'MyLibrary/Classes/**/*'

  # Cấu hình cho các platform hỗ trợ
  spec.platform     = :ios, '10.0'

  # Phụ thuộc cần thiết (ví dụ nếu thư viện phụ thuộc vào các pod khác)
  spec.dependency 'Alamofire'

  # Cấu hình cho Unit Test
  spec.test_spec 'Tests' do |test_spec|
    test_spec.requires_app_host = true
    test_spec.source_files = 'MyLibraryTests/**/*'
    test_spec.dependency 'Quick'
    test_spec.dependency 'Nimble'
  end
end

Ở đây:

  • spec.test_spec ‘Tests’: Định nghĩa cấu hình cho Unit Test. Tất cả các file test sẽ nằm trong thư mục MyLibraryTests/.
  • test_spec.dependency: Định nghĩa các phụ thuộc cho test, ở đây là QuickNimble.

3. Viết Unit Test cho thư viện

Trong thư mục MyLibraryTests, tạo các file test để kiểm tra mã nguồn của thư viện.

Ví dụ, nếu thư viện của bạn có một lớp Calculator:

public class Calculator {
    public init() {}
    
    public func add(_ a: Int, _ b: Int) -> Int {
        return a + b
    }
}

Chúng ta có thể viết Unit Test cho lớp này như sau:

import Quick
import Nimble
import MyLibrary

class CalculatorSpec: QuickSpec {
    override func spec() {
        describe("Calculator") {
            var calculator: Calculator!

            beforeEach {
                calculator = Calculator()
            }

            it("should return the sum of two numbers") {
                let result = calculator.add(2, 3)
                expect(result).to(equal(5))
            }
        }
    }
}

4. Cài đặt và chạy Unit Test

Bước 1: Cài đặt các phụ thuộc

Trước khi chạy test, bạn cần cài đặt các phụ thuộc:

cd Example
pod install

Điều này sẽ tải các thư viện cần thiết như QuickNimble, đồng thời liên kết với thư viện MyLibrary của bạn.

Bước 2: Mở file .xcworkspace

Sau khi chạy pod install, bạn sẽ thấy một file mới có tên MyLibrary.xcworkspace. Mở nó bằng Xcode để tiến hành kiểm tra và chạy test.

Bước 3: Chạy test trên thiết bị máy ảo
  1. Trong Xcode, chọn scheme của MyLibraryTests từ menu scheme (ở góc trái trên cùng).
  2. Chọn một thiết bị máy ảo (simulator) từ danh sách thiết bị.
  3. Nhấn Cmd + U để chạy tất cả các test.

Nếu tất cả test đều thành công, bạn sẽ thấy thông báo test passed trên Xcode.

Bước 4: Chạy test trên thiết bị thật
  1. Kết nối thiết bị iPhone/iPad của bạn với máy tính.
  2. Chọn thiết bị thật từ danh sách Devices trong Xcode.
  3. Nhấn Cmd + U để chạy test trên thiết bị thật.

Lưu ý rằng khi chạy test trên thiết bị thật, bạn cần đảm bảo rằng thiết bị đã được cấu hình với các profile phát triển tương thích.

BONUS

Trong quá trình setup unit test trong dự án thật, có thể các bạn sẽ gặp phải một số lỗi như không chạy được unit test, lỗi thư viện Nimble, Quick, chạy unit test trên thiết bị thật bị lỗi. Dưới đây là cách fix của mình, các bạn có thể tham khảo.

Thêm vào Podfile

post_install do |installer|
    installer.pods_project.targets.each do |target|
      if target.name == "Nimble" || target.name == "Quick"
        target.build_configurations.each do |config|
          config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'YES'
        end
      end
    end
end
# Run unittest on physic device
post_install do |installer|
  installer.generated_projects.each do |project|
    project.targets.each do |target|
      if target.name.include?("AppHost")
        target.build_configurations.each do |config|
            config.build_settings["DEVELOPMENT_TEAM"] = "UANSY5HQP8"
         end
      end
      if target.name.include?("UnitTest")
        target.build_configurations.each do |config|
            config.build_settings["DEVELOPMENT_TEAM"] = "UANSY5HQP8"
            config.build_settings.delete('CODE_SIGN_IDENTITY[sdk=iphoneos*]')
         end
      end
    end
  end
end

5. Tích hợp thư viện vào dự án chính

Sau khi thư viện đã được kiểm thử đầy đủ, bạn có thể tích hợp nó vào các dự án khác bằng cách thêm thư viện vào Podfile của dự án.

Bước 1: Thêm thư viện vào Podfile

Trong dự án chính của bạn, mở file Podfile và thêm dòng sau:

pod 'MyLibrary',
:testspecs => ['Tests'],
:path => '../MyLibrary'

Dòng này chỉ ra rằng thư viện MyLibrary nằm trong thư mục cha so với dự án chính.

Bước 2: Cài đặt thư viện

Chạy lệnh sau để cài đặt thư viện vào dự án chính:

pod install

Sau đó, bạn có thể sử dụng các lớp và hàm trong MyLibrary trong mã nguồn của dự án chính.

6. Tích hợp CI/CD để tự động chạy Unit Test

Khi bạn phát triển thư viện, việc tích hợp Continuous Integration (CI) sẽ giúp bạn tự động chạy Unit Test mỗi khi có thay đổi trong mã nguồn.

Ví dụ, bạn có thể sử dụng GitHub Actions để cấu hình CI. Dưới đây là một ví dụ cấu hình cho GitHub Actions để tự động chạy test mỗi khi có push lên nhánh main:

name: CI

on:
  push:
    branches:
      - main

jobs:
  test:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install CocoaPods dependencies
        run: pod install --project-directory=Example/
      - name: Run Tests
        run: xcodebuild test -workspace Example/MyLibrary.xcworkspace -scheme MyLibrary-Example -destination 'platform=iOS Simulator,name=iPhone 12,OS=14.5'

7. Kết luận

Bằng cách viết Unit Test và cấu hình podspec đúng cách, bạn có thể đảm bảo rằng thư viện CocoaPods của mình luôn được kiểm thử đầy đủ trước khi phân phối. Việc chạy test trên cả thiết bị ảo và thật giúp bạn kiểm soát tốt hơn chất lượng thư viện khi triển khai lên các môi trường thực tế.

Tích hợp thư viện vào dự án chính cũng rất đơn giản nhờ CocoaPods, và việc cấu hình CI/CD sẽ giúp bạn tự động kiểm tra tính ổn định của thư viện qua từng thay đổi.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Unit Test trong Swift với Quick và Nimble

Trong phát triển phần mềm, đảm bảo chất lượng mã nguồn thông qua kiểm thử tự động là một bước quan trọng. Bài viết này sẽ hướng dẫn bạn cách…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
52 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Audrey3046
Audrey3046
1 tháng trước
Leonardo3660
Leonardo3660
1 tháng trước
Teresa1068
Teresa1068
1 tháng trước
Mckenzie4229
Mckenzie4229
1 tháng trước
Dante4438
Dante4438
16 ngày trước

Елена Темникова – Как Барби В Поисках Кена скачать и слушать mp3 https://shorturl.fm/kPLAj

Claire3160
Claire3160
16 ngày trước

Zivert – Шарик скачать песню бесплатно в mp3 и слушать онлайн https://shorturl.fm/weIkV

Camille4325
Camille4325
16 ngày trước

«Руки Вверх» – Расскажи мне (Alex Curly Remix) скачать и слушать mp3 https://shorturl.fm/gckY5

Rex4459
Rex4459
16 ngày trước

Валерия и Максим Фадеев – До предела скачать песню и слушать онлайн https://shorturl.fm/0dYtd

Ava347
Ava347
16 ngày trước

Подиум – Танцуй, пока молодая скачать песню на телефон и слушать бесплатно https://shorturl.fm/3r6UD

Fiona1915
Fiona1915
16 ngày trước

Grosu – Грязные танцы скачать mp3 и слушать бесплатно https://shorturl.fm/tIQCk

Doris4865
Doris4865
16 ngày trước

Асия – Ну Че Ты Такой Хороший? скачать и слушать онлайн https://shorturl.fm/b0RkI

Thomas900
Thomas900
16 ngày trước

Туда-Сюда – Огурец скачать и слушать онлайн https://shorturl.fm/pjIuo

Leona4844
Leona4844
16 ngày trước

Big Som feat. L’One – Последний танец скачать песню и слушать онлайн https://shorturl.fm/121OX

Gilbert1807
Gilbert1807
16 ngày trước

Дима Пермяков – Твои мысли обо мне скачать и слушать онлайн https://shorturl.fm/4dg9K

Jacqueline2512
Jacqueline2512
13 ngày trước
Sydney3936
Sydney3936
13 ngày trước
Skylar3683
Skylar3683
13 ngày trước
Atticus4101
Atticus4101
13 ngày trước
Beverly3309
Beverly3309
13 ngày trước
Eleanor2671
Eleanor2671
5 ngày trước

ЛИКО – Сломанный скачать mp3 и слушать бесплатно https://shorturl.fm/FJ40F

Meagan353
Meagan353
5 ngày trước

Николь Фургал – Красные Лампочки скачать mp3 и слушать онлайн https://shorturl.fm/g21oN

Jorge3961
Jorge3961
5 ngày trước

Gurbanov feat. Kaisin – Манит скачать mp3 и слушать онлайн https://shorturl.fm/TI87f

Josephine4425
Josephine4425
5 ngày trước

Артур Ратнер – Медленно скачать и слушать mp3 https://shorturl.fm/n9s8W

Zachary1834
Zachary1834
5 ngày trước

Евгений Коновалов – И Зацветут Цветы скачать песню бесплатно в mp3 и слушать онлайн https://shorturl.fm/PR3x3

Edna3366
Edna3366
5 ngày trước

GAYAZOV BROTHER – Малиновая лада скачать песню и слушать бесплатно https://shorturl.fm/JXJvS

Max742
Max742
5 ngày trước

Татарин Feat. & Саша Санта – 18 Плюс (Gorky Records Remix) скачать и слушать mp3 https://shorturl.fm/74o9e

Claudia3148
Claudia3148
5 ngày trước

Гудрон – Just Do It скачать песню и слушать бесплатно https://shorturl.fm/UN2Ze

trackback
4 ngày trước

[…] cheap viagra 50mg […]