テストフレームワークMockito使用ノート
3706 ワード
Mockito、テストフレームワーク、文法が簡単で、機能が強い!静的、プライベート、構造などの方法のテストはPowerMockに協力する必要があり、PowerMockにはMockitoとEasyMockの2つのバージョンがあり、文法は同じで、本文はMockitoだけを紹介する.
テストイメージ:ArticleManager
ArticleManagerクラス
ArticleDatabaseクラス
Mockイメージの作成
インスタンスdsは仮想対像であり、ds対像自体のすべてのメソッドの戻り値はNullである.
既存のMockイメージ(ds)をarticleManagerに注入し、サポート方法はconstructor、setter、property、Springの@Autowired!
パラメータ呼び出しインターセプタ
Mockクラスの一部がリアルまたはカスタマイズされた後に呼び出されます.カスタマイズされたメソッドがなければ、実際のメソッドを呼び出します.
特にMock対のあるメソッドのような戻り値、タイプ、異常などを定め、デフォルトはNullである.
呼び出し回数、戻り値など、メソッドに対して結果を返すチェック
参照:@Captor
Stubbingまたはverifyでは、ファジイマッチングを使用して様々な状況の呼び出しに適応することができ、Mockitoはパッケージorgにある.mockito.Matchersの下にはanyString()やanyInt()や直接anyObject()など多くのファジイマッチング関数が提供されており、必要に応じて自分で書くこともでき、実現することができます(org.hamcrest.Matcher).例:
検証関数verifyを使用する場合、パラメータにファジイマッチングがある場合は、次のようなすべてのパラメータをファジイマッチングします.
ファジイ照合関数の詳細については、「http://mockito.googlecode.com/svn/branches/1.8.5/javadoc/org/mockito/Matchers.html」を参照してください.
mockito home mockito docs
テストイメージ: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