テストフレームワークMockito使用ノート

3706 ワード

Mockito、テストフレームワーク、文法が簡単で、機能が強い!静的、プライベート、構造などの方法のテストはPowerMockに協力する必要があり、PowerMockにはMockitoとEasyMockの2つのバージョンがあり、文法は同じで、本文はMockitoだけを紹介する.
テストイメージ:ArticleManager
ArticleManagerクラス
public class ArticleManager {
    void setDatabase(ArticleDatabase database) {... }
    String get(String val){
        database.get(val);    
    }
    String add(String val){
        database.set(val);    
    }
}

ArticleDatabaseクラス
public class ArticleDatabase {
    String get(String val){...}
    String add(String val){...}
}

注釈


@Mock


Mockイメージの作成
@Mock
private ArticleDatabase ds;

インスタンスdsは仮想対像であり、ds対像自体のすべてのメソッドの戻り値はNullである.

@InjectMocks

@InjectMocks
private ArticleManager articleManager;

既存のMockイメージ(ds)をarticleManagerに注入し、サポート方法はconstructor、setter、property、Springの@Autowired!

@Captor


パラメータ呼び出しインターセプタ
// @Captor, ,  @Captor
@Captor
private ArgumentCaptor<String> argumentString;
articleManager.add("content");
verify(ds, times(1)).add(argumentString.capture());
// 
logger.debug(argumentString.getValue());

@Spy


Mockクラスの一部がリアルまたはカスタマイズされた後に呼び出されます.カスタマイズされたメソッドがなければ、実際のメソッドを呼び出します.
@Spy 
private ArticleManager articleManager2;
// , `when` 
// :http://docs.mockito.googlecode.com/hg/latest/org/mockito/Spy.html
doReturn("0").when(articleManager2).get(0);
articleManager2.get(0);
verify(articleManager2).get(0);
// 
articleManager2.get(1)
verify(articleManager2).get(1);
@Spy実際の呼び出しは、@Mock対の像thenCallRealMethodの方法で呼び出すこともできる.
when(articleManager2.get(2)).thenCallRealMethod();

Stubbing


特にMock対のあるメソッドのような戻り値、タイプ、異常などを定め、デフォルトはNullである.
when(ds.get(0)).thenReturn("first");
when(ds.get(1)).thenThrow(new RuntimeException());

verify


呼び出し回数、戻り値など、メソッドに対して結果を返すチェック
articleManager.add("one");
verify(ds).add("one");

参照:@Captor

ファジイ整合


Stubbingまたはverifyでは、ファジイマッチングを使用して様々な状況の呼び出しに適応することができ、Mockitoはパッケージorgにある.mockito.Matchersの下にはanyString()やanyInt()や直接anyObject()など多くのファジイマッチング関数が提供されており、必要に応じて自分で書くこともでき、実現することができます(org.hamcrest.Matcher).例:
when(articleManager.get(anyString())).toReturn("element");
System.out.println(articleManager.get("1"));
verify(articleManager).get(anyString());

検証関数verifyを使用する場合、パラメータにファジイマッチングがある場合は、次のようなすべてのパラメータをファジイマッチングします.
// :
verify(mock).articleManager(anyInt(), anyString(), eq("third argument"));
// :
verify(mock).articleManager(anyInt(), anyString(), "third argument");

ファジイ照合関数の詳細については、「http://mockito.googlecode.com/svn/branches/1.8.5/javadoc/org/mockito/Matchers.html」を参照してください.

参照先:


mockito home mockito docs