2017-07-20 mockito / なわとび
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 回ほど素直に跳んだら、ふくらはぎがぱんぱんになった。