bouzuya.hatenablog.com

ぼうずやのにっき

mockito / なわとび

RxAndroid と mockito をうまく使えないでいる。

次のような subscribe が返す Disposabledispose できているかのテストを書こうとして、うまく書けなかった。

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();
}

雰囲気で書いているので正確ではない。↑における↓の位置で例外が投げられる。 subscribenull を受け取っているというものだ。

when(observable.subscribe(any())).thenReturn(disposable);

mockito の挙動を正確には知らないのだけど、↑のように書ける時点で実際の subscribe は呼び出していない……。そう考えていたのだけど、なぜ実際の subscribe の引数の検査に引っかかるのか……。よく分からないが、こんなところで時間を浪費したくないので、無視して進める。


なわとびをした。 200 回ほど素直に跳んだら、ふくらはぎがぱんぱんになった。