티스토리 뷰
[Test/RxSwift/RxTest] TestableObservable, ColdObservable, HotObservable
Hani_Levenshtein 2022. 12. 10. 05:31안녕하세요 Hani입니다.
이번에는 RxTest의 Observable에 대하여 알아볼 거예요.
Subscription
Subscription은 TestableObservable이 언제 구독되었고, 구독이 종료되었는지를 나타냅니다.
Hashable을 순응하고있습니다.
TestableObservable
TestableObservable은 HotObservable과 ColdObservable 클래스가 상속받을 클래스입니다.
시간축(TestScheduler)과 시간축에서 발생할 Recorded(Event+Time) 배열을 생성인자로 받습니다.
TestableObservable의 Lifecycle동안 기록되는 Subscription 배열은 초기에 비어있는 상태지만
HotObservable과 ColdObservable에서 subscribe 메서드를 재정의하여 Subscription 배열을 다루게 됩니다.
TestableObservable의 Subscriptions와 예상한 Subscriptions이 같은지 비교할 수 있습니다.
HotObservable
HotObservable은 자신을 구독하고 있는 observer를 저장하는 Observers 프로퍼티를 가지고 있습니다.
init 시점에 Observers가 초기화되고, 생성인자로 받은 Recorded를 Observer들이 받을 수 있도록 합니다.
init 시점이라 Observers에 Observer가 하나도 없는 상태에서 이벤트를 방출합니다.
subscribe하면 Subscriptions에 구독 시점 시간을 기록하고,
구독 시점부터 발생한 이벤트를 Observer가 받게됩니다.
dispose될 때 Subscriptions에 구독 종료 시간을 기록합니다.
HotObservable 테스트의 예시입니다.
TestScheduler/Defaults에 created(100)/subscribed(200)/disposed(1000) 시간이 고정되어 있었죠?
HotObservable이 100의 시간에 created되고
HotObservable이라서 구독에 관계없이 이벤트를 방출합니다.
subscribed 시점이 200 이기 때문에 200의 시간에 방출된 이벤트만 받을 수 있습니다.
300에 에러를 방출했기 때문에 300에 disposed가 되고 구독이 종료됩니다.
지난 포스팅에서 RxTest를 통해 테스트하고 싶은 것 중 하나로
Observable이 방출한 이벤트가 예상한 이벤트와 일치하는가
를 알아봤었고
이번에는 Observable이 언제 구독되고 구독이 종료되는지도 테스트할 수 있었습니다.
ColdObservable
ColdObservable은 Observers 프로퍼티가 없습니다.
따라서 init 시점에 이벤트를 전달할 Observers가 없고
subscribe이 일어나서야 이벤트를 전달할 수 있습니다.
subscribe하면 Subscriptions에 구독 시점 시간을 기록하고,
생성 시점부터 발생한 이벤트를 Observer가 받게됩니다.
dispose될 때 Subscriptions에 구독 종료 시간을 기록합니다.
ColdObservable 테스트의 예시입니다.
구독 시점 (subscribed = 200)부터 이벤트를 방출하기 때문에
예상한 이벤트 방출 시점은 200 + Recorded.TestTime입니다.
concat Operator의 의도대로 앞 Observable이 disposed되면 바로 다음 Observable이 시작됩니다.
'Test' 카테고리의 다른 글
[TestDouble] 기본자료형도 Dummy로 표현해야 한다 (0) | 2022.12.19 |
---|---|
[Test/RxSwift/RxTest] TestScheduler's start, TestableObserver (0) | 2022.12.09 |
[Test/RxSwift/RxTest] TestTime, Recorded, TestScheduler (0) | 2022.12.09 |
- Total
- Today
- Yesterday
- WWDC17
- 강한 순환 참조
- 최대 매칭
- HIG
- 벨만포드 시간복잡도
- rxswift
- 부스트캠프 6기
- IOS
- 포드 풀커슨 알고리즘
- 벨만포드 알고리즘
- 다익스트라 시간복잡도
- CPU와 Memory
- State Restoration
- 최단경로문제
- WWDC21
- 코딩대회
- CompositionalLayout
- test coverage
- MeTal
- WWDC19
- 에드몬드 카프 알고리즘
- 네트워크 유량
- 컴퓨터 추상화
- Testable
- observeOn
- WWDC16
- mach-o
- 최단경로 문제
- 네트워크 플로우
- 최단경로 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |