以前のリビジョンの文書です
オブジェクトAが××の状態の場合, ○○の振る舞いをする… などのテストに利用する。
オブジェクトAの代わりにモックを使用することにより、オブジェクトAを特定の状態にセットアップ
する処理を簡略化することができる。
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:実装による