Swift - UITest

Marble·2025년 1월 14일

이번 글에서는 UITest에 대해 알아보겠습니다. 앞서 공부한 테스트들이 비즈니스 로직을 점검하는 방법이라면 UITest는 컴포넌트를 점검하는 방법입니다. 비즈니스 로직이 의도한 대로 작동하는지 테스트가 필요했던 것처럼 앱을 실행했을 때 버튼, 클릭, 텍스트필드의 텍스트 화면 등 뷰의 모든 컴포넌트들이 제대로 작동하는지 확인이 필요합니다.

UITest는 주로 다음과 같은 사항을 포함합니다.

  • UI 요소의 상태 및 속성 검증
  • 사용자 상호작용(버튼 클릭, 텍스트 입력 등)에 대한 반응 검증
  • 데이터 바인딩 및 업데이트 검증

UI 테스트의 기본 구조

UI 테스트는 일반적으로 다음과 같은 구조로 이루어집니다.

  • Setup : 테스트를 시작하기 전에 필요한 초기 설정을 수행합니다.
  • Execution : 실제 테스트를 실행합니다. 이 단계에서는 UI 요소와 상호작용하거나 특정 조건을 시뮬레이션합니다.
  • Verification : 테스트 결과를 검증합니다. 예상한 결과와 실제 결과를 비교하여 테스트의 성공 여부를 판단합니다.
  • Teardown : 테스트가 끝난 후, 필요한 정리 작업을 수행합니다.

SwiftUI UI 테스트 설정 방법

  1. 테스트 타겟 생성

    Xcode에서 프로젝트를 열고, 새로운 테스트 타겟을 생성합니다.
    File > New > Target을 선택하고 iOS UI Testing Bundle을 선택합니다.

  2. 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의 테스트 리포트에서 확인할 수 있으며, 성공한 테스트와 실패한 테스트를 한눈에 볼 수 있습니다.

profile
개발자가 되고 싶은 공돌이

0개의 댓글