ユーザ用ツール

サイト用ツール


mockito

以前のリビジョンの文書です


モックについて

オブジェクトAが××の状態の場合, ○○の振る舞いをする… などのテストに利用する。

オブジェクトAの代わりにモックを使用することにより、オブジェクトAを特定の状態にセットアップ
する処理を簡略化することができる。

dependencies

build.gradleのdependenciesに下記の3行を追加。Mockito本体の他にdex化のライブラリが必要。

androidTestCompile 'org.mockito:mockito-core:1.+'
androidTestCompile 'com.google.dexmaker:dexmaker:1.+'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.+'

サンプル

// Mockitoクラスはstaticインポートすることを推奨
import static org.mockito.Mockito.*;
...

  /**
   * モックが相互作用することを検証
   * @throws Exception
   */
  @Test
  public void testVerify() throws Exception {
      List mockedList = mock(List.class);
      mockedList.add("one");
      mockedList.clear();

      // mockのメソッドが呼びだされていることを確認する
      verify(mockedList).add("one");
      verify(mockedList).clear();
  }

  /**
   * スタブとして利用
   * @throws Exception
   */
  @Test
  public void testStub() throws Exception {
      List mockedList = mock(List.class);
      
      // スタブとして「first」を返すよう設定
      when(mockedList.get(0)).thenReturn("first");

      // JUnitで検証
      String str = mockedList.get(0).toString();
      assertEquals("first", str);
  }
  

メモ

APIから値を取得し、その結果によって何らかの振る舞いを行う場合の流れの例

1~5の流れをひとまとめにしてテストするのは難しそう。
別々に考えれば可能だが、どれをテスト対象とするのか決めておく必要がある。

1.リクエスト関数
in:APIの引数など
out:なし

2.実際に接続処理を行うHttpClientやURLConnection. (ライブラリの場合もある)
in:request
out:response

3.コールバック待ちの無名クラス, メンバ変数など
in:APIからの戻り
out:APIからの戻り

4.JSONをパースする関数
in:APIからの戻り
out:なんらかのオブジェクト

5.得た結果を処理するビジネスロジック関数
in:なんらかのオブジェクト
out:実装による

ここをテストする場合は、inをモックに置き換える

参考URL

mockito.1445414286.txt.gz · 最終更新: 2015/10/21 16:58 by sou