すわりんのブログ

androidとかサブカルとかのブログです

RxObserverのテスト

RxJavaの話です

Rxでテストをする時はObservableがtestメソッドを持っているのでこの返却値を使います。

val test = Observable.fromArray(1, 2, 3, 4)
                .filter { it % 2 == 0 }
                .test()

testはTestObserverであり、自身にいくつかのassertionを持っているので UnitTest時に使うことで表明する事ができます。

//errorが発生しないことを表明
test.assertNoErrors()
//流れてきたイベント値の表明
test.assertValueAt(0) { it == 2 }
test.assertValueAt(1) { it == 4 }
//completeしていることを表明
test.assertComplete()

流れてくる値が1つだけなら test.assertValue((T) -> Boolean)も使うことが出来ます。

いつでも正しいコードと言えるように RxでもTestを書いていきましょう。

全体のコードです

 @Test
 fun filterOfEvalTest() {

        val test = Observable.fromArray(1, 2, 3, 4)
                .filter { it % 2 == 0 }
                .test()


        //errorが発生しないことを表明
        test.assertNoErrors()
        //流れてきたイベント値の表明
        test.assertValueAt(0) { it == 2 }
        test.assertValueAt(1) { it == 4 }
        //completeしていることを表明
        test.assertComplete()
}