mockitoの簡単なチュートリアル
9763 ワード
1 mockitoの概要
Mockito is a mocking framework that tastes really good. It lets you write beautiful tests with a clean & simple API. Mockito doesn’t give you hangover because the tests are very readable and they produce clean verification errors.
Mockitoは非常に良いシミュレーションフレームワークです.これにより、きれいで簡単なAPIを使用して、きれいなテストを作成することができます.これらのテストは可読性が高く、明確な検証エラーが発生するため、Mockitoは迷惑をかけません.
公式説明-howプロファイル
mockito公式ドキュメント-詳細バージョン
特性と動機github説明
次のような機能があります.
2 mockitoアプリケーション
gradleウェアハウスの追加に関する構成は次のとおりです.
repositories { jcenter() }
dependencies { testCompile "org.mockito:mockito-core:2.+" }
mavenの関連構成では、pomを追加する関連依存を検索できます.
2.1相互作用の検証
import static org.mockito.Mockito.*;
// mock creation
List mockedList = mock(List.class);
// using mock object - it does not throw any "unexpected interaction" exception
mockedList.add("one");
mockedList.clear();
// selective, explicit, highly readable verification
verify(mockedList).add("one");
verify(mockedList).clear();
2.2スタブメソッド呼び出し
// you can mock concrete classes, not only interfaces
LinkedList mockedList = mock(LinkedList.class);
// stubbing appears before the actual execution
when(mockedList.get(0)).thenReturn("first");
// the following prints "first"
System.out.println(mockedList.get(0));
// the following prints "null" because get(999) was not stubbed
System.out.println(mockedList.get(999));
2.3 mock注記使用
public class ArticleManagerTest {
@Mock private ArticleCalculator calculator;
@Mock private ArticleDatabase database;
@Mock private UserProvider userProvider;
private ArticleManager manager;
2.4コールバック
when(mock.someMethod(anyString())).thenAnswer(
new Answer() {
public Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
Object mock = invocation.getMock();
return "called with arguments: " + Arrays.toString(args);
}
});
//Following prints "called with arguments: [foo]"
System.out.println(mock.someMethod("foo"));
2.*その他
詳細ドキュメントmockito公式ドキュメント-詳細バージョン
3 verify
Mockito vertify
、その具体的な作用は以下のようにまとめることができる. @Test
public void update() throws Exception {
boolean result = personService.update(1, "new name");
// mockDao getPeron
verify(mockDao,never()).getPerson(1);
assertTrue("must true", result);
// getPerson(1)
verify(mockDao, times(1)).getPerson(eq(1));
// update
verify(mockDao, times(1)).update(isA(Person.class));
}
ただし、verifyの使用はmackオブジェクトに制限されており、通常のオブジェクトでは相関検出がサポートされていません.そうしないと、相関エラーがトリガーされます.
Argument passed to verify() is of type RegistrationMgrActor and is not a mock!
Make sure you place the parenthesis correctly!
See the examples of correct verifications:
verify(mock).someMethod();
verify(mock, times(10)).someMethod();
verify(mock, atLeastOnce()).someMethod();
org.mockito.exceptions.misusing.NotAMockException:
Argument passed to verify() is of type RegistrationMgrActor and is not a mock!
Make sure you place the parenthesis correctly!
See the examples of correct verifications:
verify(mock).someMethod();
verify(mock, times(10)).someMethod();
verify(mock, atLeastOnce()).someMethod();
at *******************
1 test completed, 1 failed
FAILURE: Build failed with an exception.
* What went wrong:
4 mockとspyの違い
プロジェクトでは、あるサービスの返却結果を処理する必要がある関数もありますが、関数ユニットをテストするときにそれらのサービスを起動することはできません.ここではMockitoツールを利用することができます.MockitoのMockとSpyは、実際に呼び出されていないオブジェクトやメソッドをブロックし、カスタム動作を設定するために使用できます.両者の違いは、
1、Mock宣言の対象は、関数の呼び出しに対してmock(すなわち虚偽の関数)を実行し、真の部分を実行しない.
2、Spyが宣言したオブジェクトは、関数の呼び出しに対してすべて本当の部分を実行します.
5 mockitoの使用アドバイス
これは公式サイトで提供されているmockitoの使用メモです.
以下は私のいくつかの悟りです.