5.1 verify() メソッド
仮想オブジェクトの作成に加えて、テスト対象のクラスが適切なオブジェクトの適切なメソッドを確実に呼び出すという、別の興味深いタスクが頻繁に発生します。さらに、正しいパラメータなどを使用して、必要な回数呼び出しました。
このために、Mockito にはメソッド群という魔法もありますMockito.verify(…)
。メソッド呼び出しチェックを指定する一般的なルールは次のとおりです。
Mockito.verify(an object).method name(parameter);
例:
@ExtendWith(MockitoExtension.class)
class VerifyTest {
@Mock
List<String> mockList;
@Test
public void whenMockAnnotation() {
//method call
String name = mockList.get(10);
// check if the method was called
Mockito.verify(mockList).get(10);
}
}
メソッド呼び出し中に、パラメータ 10 を持つメソッドがオブジェクトに対して呼び出されるverify()
というルールを設定します。mockitoList
get()
5.2 呼び出し数をチェックする verify() メソッド
場合によっては、より複雑な検証シナリオが存在することがあります。たとえば、メソッドが呼び出されたという事実だけでなく、メソッドが 3 回呼び出されたという事実も確認する必要があります。または、サイクル内でユーザーから呼び出されたため、N 回呼び出される必要がありました。
私たちは、これが可能かどうかを尋ねるのではなく、すぐに尋ねます:そのようなルールをどのように書き留めるか?繰り返しになりますが、Mockito は私たちを失望させません。ルールは次のように指定できます。
Mockito.verify(an object,quantity).method name(parameter);
重要!quantity は type ではなくint
、さまざまなパターンを定義できる特別なオブジェクトです。メソッドのさまざまなバージョンを覚えていますかany()
? ここでも同じです。さまざまなシナリオを設定できる特別なメソッドがあります。
方法 | 説明 | |
---|---|---|
1 | 一度もない() | メソッドは決して呼び出さないでください |
2 | 回(n) | n回 |
3 | 少なくとも(n) | n回以上 |
4 | 少なくとも一度は() | 1回以上 |
5 | 最大(n) | n回以下 |
6 | それだけ() | このメソッドに対する呼び出しは 1 つだけ行う必要があります |
例:
String name1 = mockList.get(1); //method call
String name2 = mockList.get(2); //method call
String name3 = mockList.get(3); //method call
//check that the get() method was called 3 times
Mockito.verify(mockList, times(3)).get(anyInt());
指定されたメソッドの呼び出し以外に、オブジェクトへの他の参照が行われないように要求することもできます。これには次のようなルールがあります。
Mockito.verifyNoMoreInteractions(an object);
5.3 メソッドの呼び出し順序
以前のルールでは、メソッドの呼び出し順序はまったく規制されていませんでした。ルールを守ればいいだけです。ただし、メソッド呼び出しの順序が重要な状況もあり、Mockito にはこれに対する解決策もあります。
メソッド呼び出しの厳密な順序は、特別なオブジェクトを使用して指定できますInOrder
。まず、それを作成する必要があります。
InOrder inOrder = Mockito.inOrder(an object);
次に、メソッドを呼び出してルールを追加しますverify()
。
例:
List<String> mockedList = mock(MyList.class);
mockedList.size();
mockedList.add("a parameter");
mockedList.clear();
InOrder inOrder = Mockito.inOrder(mockedList);
inOrder.verify(mockedList).size();
inOrder.verify(mockedList).add("a parameter");
inOrder.verify(mockedList).clear();
5.4 Mockito での例外のチェック
例外がスローされたという事実は、少し異なる方法でチェックされます。これを行うには、 メソッドを使用しますassertThrows()
。このようなチェックの一般的な形式は次のとおりです。
Assertions.assertThrows(exception.class, () -> an object.methodname());
何も複雑なことはありません。
例:
@ExtendWith(MockitoExtension.class)
class ThenThrowTest {
@Mock
List mockList;
@Test
public void whenMockAnnotation() {
//set the behavior of the method (needed for demonstration purposes only)
Mockito.when(mockList.size()).thenThrow(IllegalStateException.class);
//check if an IllegalStateException will be thrown when calling the size method
assertThrows(IllegalStateException.class, () -> mockList.size());
}
}
GO TO FULL VERSION