Java
Android
RxJava
RxJavaDay 10

TestObserverとTestSubscriber

More than 3 years have passed since last update.

RxJava 1.1にて,いままでExperimentalだったTestObserverTestSubscriverがbetaになりました.

どちらもインスタンスをsubscribe()の引数に渡してあげて使います.


TestObserver


何をするの?



  • onNextonErroronCompleteの各イベントをすべて記録してくれる

  • 記録したうえで別のObserverに処理を移譲できる

  • 記録したイベントのassertionができる


APIs



  • getOnCompletedEvents() / getOnErrorEvents() / getOnNextEvents() / getEvents()


    • 発生イベントのgetter




  • assertReceivedOnNext(List<T> items)



    • onNextで意図通りのイベントが流れているかの検査




  • assertTerminalEvent()


    • terminal event(onError or onComplete)が1つだけ発生したかどうか




TestSubscriber


何をするの?



  • Subscriber<T>及びSubscriptionのサブクラス


  • TestObserverを内部に持つ


APIs



  • TestObserverの各メソッド



    • TestSubscriberが保持するTestObserverのインスタンスに移譲している




  • assertUnsubscribed()


    • unsubscribedされているかの検査




  • assetNoErrors()


    • エラーが発生していないかの検査




  • awaitTerminalEvent() / awaitTerminalEvent(long timeout, TimeUnit unit)


    • terminal eventが発生するまで待ってくれる

    • (内部でCountDownLatchを保持している)




  • awaitTerminalEventAndUnsubscribeOnTimeout(long timeout, TimeUnit unit)


    • timeoutしたらunsubscribeしてくれるタイプのawaitTerminalEvent




  • getLastSeenThread()


    • 最後に発生したイベントのthreadを返す




  • assertCompleted() / assertNotCompleted()



    • onCompleteが1回以上呼ばれているか・呼ばれていないか




  • assertError(Class<? extends Throwable> clazz) / assertError(Throwable throwable)


    • そのエラーが1回呼ばれたか

    • 2回以上エラーが発生していてもAssertionError




  • assertNoTerminalEvent()


    • terminal eventが呼ばれていないことの検査




  • assertNoValues()



    • onNextが呼ばれていないことの検査




  • assertValueCount(int count)



    • onNextcount回呼ばれたかどうかの検査




  • assertValues(T... values)



    • assertReceivedOnNext()の可変長引数ver.




  • assertValue(T)



    • assertReceivedOnNext()の引数が1つだけver.




References