티스토리 뷰

안녕하세요 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이 시작됩니다.

 

 

 

댓글