@blog.justoneplanet.info

日々勉強

Mozc for Androidのテストを読んでみる

EasyMockを使っている部分があるのでそこに関する自分用のメモ

public class MozcViewTest extends InstrumentationTestCaseWithMock

以下のようにしてモックを作る。

@SmallTest
public void testStartAnimation() {
    MozcView mozcView = createViewMockBuilder(MozcView.class)
        .addMockedMethods("getCandidateView", "getSymbolInputView", "expandDropShadowAndBackground", "collapseDropShadowAndBackground")
        .createMock();
    CandidateView candidateView = createViewMockBuilder(CandidateView.class)
        .addMockedMethods("getVisibility")
        .addMockedMethod("setVisibility", int.class)
        .createMock();
    SymbolInputView symbolInputView = createViewMockBuilder(SymbolInputView.class)
        .addMockedMethods("getVisibility")
        .addMockedMethod("setVisibility", int.class)
        .createMock();

以下のようにテストする。

    {
      resetAll();// 今までのexpectで登録されたものをリセット

      expect(mozcView.getCandidateView()).andReturn(candidateView);
      // (a)を実行した時、モックmozcViewのgetCandidateViewが呼ばれ返り値がcandidateViewでとなる事を想定

      candidateView.setVisibility(View.GONE);
      expect(mozcView.getSymbolInputView()).andReturn(symbolInputView);
      // (a)を実行した時、モックmozcViewのgetSymbolInputViewが呼ばれ返り値がsymbolInputViewでとなる事を想定

      expect(symbolInputView.getVisibility()).andReturn(View.VISIBLE);
      // (a)を実行した時、モックsymbolInputViewのgetVisibilityが呼ばれ返り値がView.VISIBLEでとなる事を想定

      replayAll();// 登録したモックをリプレイモードにする
      mozcView.startCandidateViewOut();// (a)…startCandidateViewOutを実行する
      verifyAll();// 登録したモックを全て検証する(想定通りになったかどうか検証)
    }

startCandidateViewOutは以下のようになっているとする。

  void startCandidateViewOut() {
    getCandidateView().setVisibility(View.GONE);
    if (getSymbolInputView().getVisibility() != VISIBLE && isDropShadowExpanded) {
      collapseDropShadowAndBackground();
    }
  }

この時にstartCandidateViewOutで、expectしていないメソッドが呼ばれたり、定義した回数以上呼ばれたりなどするとテストが失敗する。

参考

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment