RxAndroid と mockito をうまく使えないでいる。
次のような subscribe
が返す Disposable
を dispose
できているかのテストを書こうとして、うまく書けなかった。
class Klass { Observable observable; // T とか書いていないけど、雰囲気ってことで……。 Disposable disposable; Klass(Observable o) { observable = o; } void subscribe() { disposable = observable.subscribe(/* ... */); } void dispose() { diposable.dispose(); } }
@Test void test() { Observable observable = mock(Observable.class); Disposable disposable = mock(Disposable.class); when(observable.subscribe(any())).thenReturn(disposable); Klass klass = new Klass(observable); klass.subscribe(); klass.dispose(); verify(disposable, times(1)).dispose(); }
雰囲気で書いているので正確ではない。↑における↓の位置で例外が投げられる。 subscribe
が null
を受け取っているというものだ。
when(observable.subscribe(any())).thenReturn(disposable);
mockito の挙動を正確には知らないのだけど、↑のように書ける時点で実際の subscribe
は呼び出していない……。そう考えていたのだけど、なぜ実際の subscribe
の引数の検査に引っかかるのか……。よく分からないが、こんなところで時間を浪費したくないので、無視して進める。
なわとびをした。 200 回ほど素直に跳んだら、ふくらはぎがぱんぱんになった。