Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Swift
- appstore
- Git
- Firebase
- SwiftUI
- 웹뷰
- IOS
- view
- Notification
- geofencing
- 개발자
- 이미지
- UIButton
- window
- JPA
- Xcode
- 한글
- mac
- darkmode
- github
- Realm
- iOS16
- Archive
- rxswift
- Session
- Apple
- FLUTTER
- MacOS
- Code
- error
Archives
- Today
- Total
EEYatHo 앱 깎는 이야기
Swift ) XCTestCase 파헤치기 - EEYatHo iOS 본문
반응형
UnitTest 파일을 만들면 상속받고 있는 XCTestCase 가 있다.
테스트에 관심이 생겨, 공식 문서 정리
XCTestCase 란 ? ( Overview )
- 테스트를 시작하기 전이나, 테스트가 끝난 후의 행동을 setup 할 수 있는 Test Method 들의 그룹입니다.
테스트 케이스와 함수 정의하기 - XCTActivity 를 따르기 때문에, 복잡한 테스트들을 조직화하고 단순화할 수 있으며, 분석을 위한 output 출력이 가능합니다.
For more information, see Activities and Attachments. - expectations 를 사용하여 비동기 테스트를 만들 수 있습니다.
- 앱에서 Concurrency 를 사용하고 있다면 맘껏 사용하세요, async 나 async throws 모두 지원합니다.
- 특정 코드 블록의 성능을 측정할 수도 있습니다. 즉, 앱 성능의 지속적인 개선을 위해 성능 테스트를 구축할 수 있습니다.
For more information, see Improving your app’s performance.
( 실행시간뿐만 아니라, CPU, Memory 등도 측정 가능 )
테스트 준비와 정리 커스텀 ( Customizing Test Setup and Teardown )
- 아티클 : Set Up and Tear Down State in Your Tests
테스트 시작 전 초기상태를 준비하고, 테스트가 끝난 후 리소스를 정리하는 방법에 대한 문서입니다. - func addTeardownBlock(() -> Void)
테스트 메소드가 끝난 후 실행할 정리(teardown) 코드 블럭을 등록합니다.
- class func tearDown()
test case 가 끝난 후 정리를 수행할 기회를 제공합니다.
- class func setUp()
test case 시작 전에, initial state 를 커스텀하는 기회 제공
테스트 케이스 실행 관리 ( Managing Test Case Execution )
- class var runsForEachTargetApplicationUIConfiguration: Bool
앱이 지원하는 방향(orientation). 지역화(localization), 모양(appearance. 다크모드 라이트모드 등)
등 여러 settings 의 가능한 조합에 대해 UI 테스트를 모두 실행할지 여부입니다. - var continueAfterFailure: Bool
실패가 발생해도 test methods 를 끝까지 실행해야 하는지 여부입니다. - var executionTimeAllowance: TimeInterval
테스트의 타임아웃을 나타내는 변수입니다. 가장 가까운 minute 로 반올림 됩니다.
성능 측정 ( Measuring Performance )
- func measure(() -> Void)
코드 블록의 성능을 측정(기록)합니다. - func measure(metrics: [XCTMetric], options: XCTMeasureOptions, block: () -> Void)
코드 블록에 대해 선택한 항목을 측정(기록) 합니다.
XCTMetric 은 CPU, Memory 등 측정할 것을 말하며, 측정할 XCTMetric 의 배열을 넣을 수 있습니다.
XCTMeasureOptions 는 성능 측정을 제어할 수 있습니다. - func measureMetrics([XCTPerformanceMetric], automaticallyStartMeasuring: Bool, for: () -> Void)
measure(_:) 메소드보다 더욱 세분화된 제어를 제공합니다.
automaticallyStartMeasuring 로 측정 시작점을 연기 할 수 있습니다.
automaticallyStartMeasuring 이 false 라면, startMeasuring() 이 호출될 때 까지 측정이 시작되지 않습니다.
여러 메트릭을 측정할 수 있습니다.
XCTPerformanceMetric 은 측정(XCTMetric) 항목 중 하나로, 블럭의 실행시간을 측정하는 Metric 입니다.
여러 메트릭을 측정할 수 있습니다.
( 결국 wallClockTime 밖에 없어서, 시간밖에 측정을 못하는 것 같은데, 아직 이해가 안되네..-ㅅ- ) - func startMeasuring()
코드 블록 내에서 성능 측정을 시작합니다. - func stopMeasuring()
코드 블록 내에서 성능 측정을 종료합니다. - class var defaultPerformanceMetrics: [XCTPerformanceMetric]
테스트에서 성능을 기록하는데 사용하는 기본 XCTPerformanceMetric 배열입니다. - class var defaultMetrics: [XCTMetric]
테스트에서 성능을 기록하는데 사용하는 기본 XCTMetric 배열입니다. - class var defaultMeasureOptions: XCTMeasureOptions
테스트에서 성능을 기록하는데 사용하는 기본 측정 옵션입니다.
비동기 테스트 (1) Expectation 만들기 ( Creating Asynchronous Test Expectations )
XCTaseCase 는 기대치(XCTestExpectation) 를 만들고,
원하는 기대치들을 기다리다가(wait), // 코드 실행이 멈춥니다.
기대치들이 이 충족(fulfill) 되면, 코드가 계속 실행되는 기능을 제공하며,
이를 이용해 비동기 테스트를 할 수 있습니다.
충족은 기대치에 직접 접근하여 .fulfill() 할 수도 있고,
Notification 도 가능하며,
Predicate 도, Key-Value Observing 도 가능합니다.
- func expectation(description: String) -> XCTestExpectation
기대치를 생성합니다. description 을 작성할 수 있습니다. - func expectation(for: NSPredicate, evaluatedWith: Any?, handler: XCTNSPredicateExpectation.Handler?) -> XCTestExpectation
NSPredicate 공부하기 - func expectation(forNotification: NSNotification.Name, object: Any?, handler: XCTNSNotificationExpectation.Handler?) -> XCTestExpectation
특정 Notification 을 받을 때, 충족하는 기대치를 생성합니다. - func expectation(forNotification: NSNotification.Name, object: Any?, notificationCenter: NotificationCenter, handler: XCTNSNotificationExpectation.Handler?) -> XCTestExpectation
특정 Notification Center 에서 특정 Notification 을 받을 때, 충족하는 기대치를 생성합니다. - func keyValueObservingExpectation(for: Any, keyPath: String, expectedValue: Any?) -> XCTestExpectation
특정 keyPath 의 value 가 expectedValue 와 같아지면 충족하는 기대치를 생성합니다. - func expectation<T, V>(that: KeyPath<T, V>, on: T, options: NSKeyValueObservingOptions, willEqual: V) -> XCTKeyPathExpectation<T, V>
KeyPath - func expectation<T, V>(that: KeyPath<T, V>, on: T, options: NSKeyValueObservingOptions, willSatisfy: XCTKeyPathExpectation<T, V>.Predicate?) -> XCTKeyPathExpectation<T, V>
KeyPath
비동기 테스트 (2) Waiting ( Waiting for Expectations )
- func wait(for: [XCTestExpectation], timeout: TimeInterval, enforceOrder: Bool)
기대치들이 충족되거나 timeout 될 때 까지 기다립니다.
enforceOrder : true 라면, 기대치들이 배열의 순서대로 충족되어야 합니다. - typealias XCWaitCompletionHandler
기대치들이 충족되거나 timeout 될 때 호출하는 블록입니다. - struct XCTestError
기대치들의 충족을 대기하면서 발생할 수 있는 오류 유형입니다.
UI 인터럽션 모니터링하기 ( Monitoring UI Interruptions )
- 아티클 : Handling UI Interruptions
- func addUIInterruptionMonitor(withDescription: String, handler: (XCUIElement) -> Bool) -> NSObjectProtocol
현재 컨텍스트에 UIInterruptionMonitor 을 추가합니다. - func removeUIInterruptionMonitor(NSObjectProtocol)
UIInterruptionMonitor 을 제거합니다.
Relationships
상속
프로토콜 구현
'iOS, Swift > Testing' 카테고리의 다른 글
Swift ) XCTest UnitTest - EEYatHo iOS (0) | 2022.11.12 |
---|---|
테스트 코드 필요성, 7원칙, FIRST 원칙 (0) | 2022.01.13 |
Comments