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していないメソッドが呼ばれたり、定義した回数以上呼ばれたりなどするとテストが失敗する。