이번 글에서는 UITest에 대해 알아보겠습니다. 앞서 공부한 테스트들이 비즈니스 로직을 점검하는 방법이라면 UITest는 컴포넌트를 점검하는 방법입니다. 비즈니스 로직이 의도한 대로 작동하는지 테스트가 필요했던 것처럼 앱을 실행했을 때 버튼, 클릭, 텍스트필드의 텍스트 화면 등 뷰의 모든 컴포넌트들이 제대로 작동하는지 확인이 필요합니다.
UITest는 주로 다음과 같은 사항을 포함합니다.
UI 테스트는 일반적으로 다음과 같은 구조로 이루어집니다.
테스트 타겟 생성
Xcode에서 프로젝트를 열고, 새로운 테스트 타겟을 생성합니다.
File > New > Target을 선택하고 iOS UI Testing Bundle을 선택합니다.
UI 테스트 코드 작성
UI 테스트는 XCTest 프레임워크를 사용하여 작성됩니다. 아래는 SwiftUI 뷰에 대한 UI 테스트의 예시입니다.
// CounterView.swift
import SwiftUI
struct CounterView: View {
@State private var count: Int = 0
var body: some View {
VStack {
Text("Count: \(count)")
.accessibilityIdentifier("countLabel") // 접근성 식별자 추가
Button(action: {
count += 1
}) {
Text("Increment")
.accessibilityIdentifier("incrementButton") // 접근성 식별자 추가
}
}
.padding()
}
}
// CounterViewUITests.swift
import XCTest
class CounterViewUITests: XCTestCase {
func testIncrementButton() {
// Given: 앱을 실행하고 초기 상태를 설정합니다.
let app = XCUIApplication()
app.launch() // 앱 실행
// UI 요소에 접근
let incrementButton = app.buttons["incrementButton"]
let countLabel = app.staticTexts["countLabel"]
// 초기 상태 검증
XCTAssertEqual(countLabel.label, "Count: 0", "Initial count should be 0.")
// When: Increment 버튼을 클릭합니다.
incrementButton.tap() // 버튼 클릭
// Then: Count가 1로 증가했는지 검증합니다.
XCTAssertEqual(countLabel.label, "Count: 1", "Count should be incremented to 1.")
// When: Increment 버튼을 다시 클릭합니다.
incrementButton.tap() // 버튼 클릭
// Then: Count가 2로 증가했는지 검증합니다.
XCTAssertEqual(countLabel.label, "Count: 2", "Count should be incremented to 2.")
}
}
테스트를 하고 싶을 때는 테스트 파일을 선택한 후, 상단 메뉴에서 "Product" -> "Test"를 선택하면 테스트가 실행됩니다. 테스트 결과는 Xcode의 테스트 리포트에서 확인할 수 있으며, 성공한 테스트와 실패한 테스트를 한눈에 볼 수 있습니다.