[swift] SwiftGen을 이용한 UI 테스트 자동화

상상해보세요. 매번 Xcode에서 UI 테스트를 작성할 때마다 오랜 시간을 소비하는 대신, 테스트 자동화 도구를 사용하여 조금만 코드를 작성하면 UI 요소에 대한 테스트를 자동으로 실행할 수 있다면 얼마나 편리할까요? SwiftGen은 이를 가능하게 하는 도구 중 하나입니다.

SwiftGen은 Swift 앱 개발을 위한 테스트 자동화 도구로, UI 요소들을 한 곳에 정의하고 초기화할 수 있게 해줍니다. 이를 통해 코드의 중복을 제거하고 테스트의 일관성을 유지할 수 있습니다. 이번 글에서는 SwiftGen을 사용하여 UI 테스트 자동화를 구현하는 방법에 대해 알아보겠습니다.

SwiftGen 설치하기

SwiftGen은 CocoaPods 또는 Carthage를 통해 설치할 수 있습니다. CocoaPods를 사용하는 경우, Podfile에 다음과 같이 추가합니다:

pod 'SwiftGen'

Carthage를 사용하는 경우, Cartfile에 다음과 같이 추가하고 carthage update를 실행합니다:

github "SwiftGen/SwiftGen"

UI 요소 정의하기

SwiftGen을 사용하려면 UI 요소들을 정의해야 합니다. 예를 들어, 버튼과 텍스트 필드를 정의하려면 다음과 같이 Assets 폴더를 생성하고 해당 폴더에 Images.xcassetsLocalizable.strings 파일을 추가합니다.

Assets/
├── Images.xcassets/
│   └── Button.imageset/
│       ├── Button.png
│       └── Button@2x.png
└── Localizable.strings

코드에서 UI 요소 사용하기

SwiftGen을 사용하여 UI 요소들을 코드에서 사용하려면 다음과 같이 코드를 작성합니다.

import SwiftGen

// 이미지 사용 예시
let buttonImage = UIImage(asset: .button)

// 로컬라이징 사용 예시
let localizedString = L10n.helloWorld

SwiftGen은 자동으로 Images.xcassetsLocalizable.strings 파일을 분석하여 해당 요소들을 Swift 코드로 생성합니다. 이렇게 생성된 코드를 이용하여 UI 요소들을 초기화하고 사용할 수 있습니다.

UI 테스트 자동화하기

SwiftGen을 사용하여 UI 요소들을 코드에서 사용하면 UI 테스트를 자동화하기도 쉬워집니다. 예를 들어, 버튼을 탭하고 결과를 확인하는 테스트를 작성해 봅시다.

import XCTest
import SwiftGen

class ButtonTapTest: XCTestCase {
    var app: XCUIApplication!
    
    override func setUpWithError() throws {
        continueAfterFailure = false
        app = XCUIApplication()
        app.launch()
    }
    
    func testButtonTap() throws {
        let button = app.buttons[AccessibilityIdentifiers.button]
        button.tap()
        
        let resultLabel = app.staticTexts[AccessibilityIdentifiers.resultLabel]
        XCTAssertEqual(resultLabel.label, "Button Tapped")
    }
}

위의 코드에서 AccessibilityIdentifiers는 SwiftGen을 사용하여 정의된 UI 요소들의 식별자입니다. 이를 사용하면 코드에서 UI 요소들에 대한 정확한 접근이 가능해집니다.

마치며

SwiftGen을 사용하면 UI 테스트 자동화를 편리하게 구현할 수 있습니다. 코드의 중복을 최소화하고 테스트의 일관성을 유지하면서 효율적인 UI 테스트를 작성할 수 있습니다. SwiftGen을 활용하여 앱 개발에서 시간을 절약하고 더 나은 퀄리티의 코드를 작성해보세요.