상상해보세요. 매번 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.xcassets
와 Localizable.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.xcassets
와 Localizable.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을 활용하여 앱 개발에서 시간을 절약하고 더 나은 퀄리티의 코드를 작성해보세요.