- Unit Test : 특정 메서드의 동작에 대한 테스트, Scene 을 대상으로 진행. 예를들어, MainViewControllerTests.swift, SubViewControllerTests.swift 처럼 ViewController 별로 테스트를 함. 그래서 sut (System Under Test) 를 도입.
- UI Test : UI 표시 or UI Action 에 대한 테스트, App 을 대상으로 진행. ViewController 별로 나눠서 관리한다기 보다, 전체적으로 테스트를 함. 그래서 app = XCUIApplication() 을 도입
- Xcode에 기본으로 UITest 파일이 생성
- sut이 아닌 app을 선언
- Unit Test 는 그 메서드가 적절하게 잘 호출되는지가 포인트라면, UI Test 는 앱에서 UI component의 타입인 identifier 혹은 그 component가 존재하는지를 파악하는게 포인트
- 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) } }