Jimmy's iOS

TDD - UI Test 본문

TDD

TDD - UI Test

Jimmy Youn 2022. 6. 30. 20:03

테스트 주도 개발 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

 

 

참고 : https://mildwhale.tistory.com/33