Mockito Verifyの使用


概要
Mockito Verifyメソッドは、特定の動作が発生したかどうかを確認するために使用されます.テストメソッドコードの最後にMockito検証メソッドを使用して、指定したメソッドが呼び出されていることを確認できます.ここでは、主に使い方と機能について説明します.
  • Mockito verify
  • Mockito verify()簡単な例
  • Mockito検証回数
  • verifyNoMoreInteractions()
  • verifyZeroInteractions()
  • Mockito検証メソッド呼び出しのみ
  • Mockito検証呼び出し順序
  • 小結
  • Mockito verify
  • Mockito verify()メソッドは、メソッド呼び出しの数をテストするために使用されてもよい.シミュレーション法の正確な回数を試験することができ,少なくとも1回,少なくとも1回試験することができる.すべてのverify()メソッド呼び出し後.
  • verifyNoMoreInteractions()を使用して、すべてのコンテンツが検証されていることを確認できます.まだ検証方法がある場合は、失敗し、正しいメッセージが表示されます.
  • verifyZeroInteractions()の挙動はverifyNoMoreInteractions()の方法と同じである.
  • メソッドを使用して、メソッド呼び出しの順序を検証できます.メソッド呼び出しをスキップできますが、検証するメソッドは同じ順序でなければなりません.シミュレーション検証方法の例を見てみましょう.
  • @Test
    void test() {
    	List<String> mockList = mock(List.class);
    	mockList.add("Pankaj");
    	mockList.size();
    	verify(mockList).add("Pankaj");
    }
    

    シミュレーションリストオブジェクトでinOrder()が1回しか呼び出されない場合、上記verifyメソッドは通過します.add(“ Pankaj”)パラメータ呼び出しをverifyメソッドで使用するのと同じです.
    verify(mockList, times(1)).size();
    

    メソッドが呼び出されたことを確認したいが、パラメータに関心がない場合は、times(1)ArgumentMatchersメソッドとともに使用することができる.
    verify(mockList).add(anyString());
    verify(mockList).add(any(String.class));
    verify(mockList).add(ArgumentMatchers.any(String.class));
    
    verifyクラスは、org.mockito.Mockitoクラスを使用してスムーズなコードを記述するのに役立つMockitoフレームワークのほとんどの有用な方法に静的方法を提供していることに注意してください.
    Mockito検証回数
    Mockito verify() method is overloaded, the second one is import static . We can use it to verify for the invocation count.
    verify(mockList, times(1)).size(); //same as normal verify method
    verify(mockList, atLeastOnce()).size(); // must be called at least once
    verify(mockList, atMost(2)).size(); // must be called at most 2 times
    verify(mockList, atLeast(1)).size(); // must be called at least once
    verify(mockList, never()).clear(); // must never be called
    

    verifyNoMoreInteractions()
    このメソッドは、すべての検証メソッドの後に使用して、すべてのインタラクションが検証されることを確認できます.シミュレーションオブジェクトに検証されていないインタラクションがある場合は、テストに失敗します.
    
    // all interactions are verified, so below will pass
    verifyNoMoreInteractions(mockList);
    mockList.isEmpty();
    // isEmpty() is not verified, so below will fail
    verifyNoMoreInteractions(mockList);
    

    2回目の呼び出しverify(T mock, VerificationMode mode)は失敗し、次のエラーメッセージが表示されます.
    org.mockito.exceptions.verification.NoInteractionsWanted: 
    No interactions wanted here:
    -> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:36)
    But found this interaction on mock 'list':
    -> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:34)
    ***
    For your reference, here is the list of all invocations ([?] - means unverified).
    1. -> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:18)
    2. -> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:19)
    3. [?]-> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:34)
    

    Mockitoの大きな機能は異常メッセージであり,テストに失敗した点を明確に指摘しているので,簡単に修復できる.
    verifyZeroInteractions() verifyNoMoreInteractions()法の挙動はverifyZeroInteractions()法と同じである.
    Map mockMap = mock(Map.class);
    Set mockSet = mock(Set.class);
    verify(mockList).isEmpty();
    verifyZeroInteractions(mockList, mockMap, mockSet);
    

    Mockito検証メソッド呼び出しのみ
    1つのメソッドのみが呼び出されたことを検証する場合は、verifyNoMoreInteractions()をverifyメソッドとともに使用できます.
    Map mockMap = mock(Map.class);
    mockMap.isEmpty();
    verify(mockMap, only()).isEmpty();
    

    Mockito検証呼び出し順序only()を使用して呼び出し順序を検証できます.検証には任意の方法をスキップできますが、検証する方法は同じ順序で呼び出さなければなりません.
    InOrder inOrder = inOrder(mockList, mockMap);
    inOrder.verify(mockList).add("Pankaj");
    inOrder.verify(mockList, calls(1)).size();
    inOrder.verify(mockList).isEmpty();
    inOrder.verify(mockMap).isEmpty();
    

    まとめ
    Mockito verify()メソッドは、シミュレーションオブジェクトメソッドが呼び出されることを保証するために使用することができる.メソッド呼び出しが誤って削除された場合、verifyメソッドによってエラーが発生します.