[iOS] UI Test Code 작성

김상우·2022년 2월 19일
1

Unit Test vs UI Test

  • Unit Test : 특정 메서드의 동작에 대한 테스트, Scene 을 대상으로 진행. 예를들어, MainViewControllerTests.swift, SubViewControllerTests.swift 처럼 ViewController 별로 테스트를 함. 그래서 sut (System Under Test) 를 도입.
  • UI Test : UI 표시 or UI Action 에 대한 테스트, App 을 대상으로 진행. ViewController 별로 나눠서 관리한다기 보다, 전체적으로 테스트를 함. 그래서 app = XCUIApplication() 을 도입

XCUIApplication (UI Test)

  • Xcode에 기본으로 UITest 파일이 생성
  • sut이 아닌 app을 선언
  • Unit Test그 메서드가 적절하게 잘 호출되는지가 포인트라면, UI Test 는 앱에서 UI component의 타입인 identifier 혹은 그 component가 존재하는지를 파악하는게 포인트

나만의 UI Test Code 작성 예시

  • BDD 방법론을 기반으로 UI Test Code 를 작성해봤다.
  • 지금 개발하고 있는 앱에서, 상황에 따른 Box On / Off 버튼 UI 상태를 테스트 해봤다.
// UserDefaults 설정에 맞춰서 초기 box On Off 버튼 세팅 설정
    func test_boxOnOff() {
        let defaults = UserDefaults.standard

        // "BoxOn 으로 앱 시작"으로 설정 돼있으면 BoxOnImageButton 게시
        if defaults.bool(forKey: "startWithBoxON") {
            let elementsQuery = app.scrollViews.otherElements
            // 1. given
            let boxOnImageButton = elementsQuery.buttons["boxOnImage"]
            boxOnImageButton.tap()

            // 2. when
            let existBoxOffImageButton = elementsQuery.buttons["boxOffImage"]
                .exists

            // 3. then
            XCTAssertTrue(existBoxOffImageButton)
        }
        // "BoxOff 로 앱 시작"으로 설정 돼있으면 BoxOㄹㄹImageButton 게시
        else {
            let elementsQuery = app.scrollViews.otherElements
            // 1. given
            let boxOffImageButton = elementsQuery.buttons["boxOffImage"]
            boxOffImageButton.tap()

            // 2. when
            let existBoxOnImageButton = elementsQuery.buttons["boxOnImage"]
                .exists

            // 3. then
            XCTAssertTrue(existBoxOnImageButton)
        }

    }
profile
안녕하세요, iOS 와 알고리즘에 대한 글을 씁니다.

0개의 댓글