Jimmy's iOS
TDD - UI Test 본문
테스트 주도 개발 TDD (Test-Driven Development) 은 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다.
개발자는 먼저 요구 사항을 검증하는 자동화 된 테스트 케이스를 작성한다. 그런 후 그 테스트 케이스를 통과하기 위한 최소한의 코드를 생성한다. 마지막으로 작성한 코드를 표준에 맞도록 리펙토링을 한다.
TDD Cycle
TDD 는 실패 - 성공 - 리펙토링의 짧은 주기를 반복하여 좋은 코드를 도출해내는 방식이다.
- Red : 실패하는 테스트를 작성하는 구간
- Green : 실패한 테스트를 통과하기 위해 최소한의 변경을 하여 테스트에 성공하는 구간
- Refactor : 테스트의 성공을 유지하면서 코드를 더 나은 방향으로 개선해 나가는 구간
TDD 의 장단점
- 장점
- 높은 퀄리티의 소프트웨어를 보장한다.
- 에러나 버그가 발생하지 않는 코드를 작성할 수 있다.
- 추가적인 요구사항이 있을 때 손쉽게 그 요구사항을 반영할 수 있다.
- 유지보수에 용이하다.
- 단점
- 개발 진행 속도.
UI Test (User Interface Test)
1. UI Testing Bundle 을 추가해준다.
2. UI Test 시작 코드
import XCTest
class SampleTest: XCTestCase {
override func setUpWithError() throws {
// Put setup code here. This method is called before the invocation of each test method in the class.
// In UI tests it is usually best to stop immediately when a failure occurs.
continueAfterFailure = false
// In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
}
override func tearDownWithError() throws {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
func testExample() throws {
// UI tests must launch the application that they test.
let app = XCUIApplication()
app.launch()
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testLaunchPerformance() throws {
if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {
// This measures how long it takes to launch your application.
measure(metrics: [XCTApplicationLaunchMetric()]) {
XCUIApplication().launch()
}
}
}
}
- XCTestCase
- Xcode 에서 사용하는 테스트 클래스의 기반이 되는 XCTestCase 는 테스트에 필요한 기본적인 기능을 제공한다.
- 모든 테스트 클래스는 XCTestCase 를 상속받아 구현해야 한다.
- XCUIElement
- UI 테스트에서 UIButton 또는 UILabel 등의 컴포넌트를 대신하는 객체이다.
- UI 테스트는 사람이 실제로 앱을 사용하는 것처럼 현재 실행 중인 앱에서 필요한 UI 컴포넌트를 찾아 tap 을 하거나, 텍스트를 입력하고 스크롤을 하는 등의 동작을 구현해야 한다.
- setUpWithError
- 각 테스트가 실행되기 전에 호출된다.
- tearDownWithError
- 각 테스트가 실행되고 나서 호출된다.
- continueAfterFailure
- 실패가 발생 한 후 테스트 메소드가 계속 실행되어야 하는지 여부를 나타내는 프로퍼티, UI Test 에서는 일반적으로 오류가 발생하면 즉시 중지하는것이 좋다. → self.continueAfterFailure = false
- testExample()
- 테스트 실행을 위한 커스텀 함수 작성은 'test' 라는 단어로 시작을 해야한다.
- XCTestCase 를 상속받는 테스트 클래스에 'test' 로 시작하는 함수는 모두 테스트 함수로 인식이 된다.
간단한 실습 예제 : Github
GitHub - ByoungilYoun/UI_Test: Practice UI Test
Practice UI Test. Contribute to ByoungilYoun/UI_Test development by creating an account on GitHub.
github.com