mockito詳細

7975 ワード

mockito詳細


紹介する

  • Mockitoライブラリでは、シミュレーションの作成、検証、ルートの保存が可能です.
  • mockオブジェクトは、デバッグ中に実際のオブジェクトとして使用される代替品です.
  • mockテストとは、テスト中に構築しにくいオブジェクトに対してテストの代わりに仮想オブジェクトを使用する方法をmockテストと呼ぶ.

  • とくせい

  • まず小さな例
  •  // , 
     import static org.mockito.Mockito.*;
    
     // mock 
     List mockedList = mock(List.class);
    
     // mock 
     mockedList.add("one");
     mockedList.clear();
    
     // 
     verify(mockedList).add("one");
     verify(mockedList).clear();

    mockオブジェクトが作成されると、すべての検証が記憶され、興味のあるときにオプションの検証が提供されます.
  • stubbingについて話しましょう
  • 
     //You can mock concrete classes, not just interfaces
     LinkedList mockedList = mock(LinkedList.class);
    
     //stubbing
     when(mockedList.get(0)).thenReturn("first");
     when(mockedList.get(1)).thenThrow(new RuntimeException());
    
     //following prints "first"
     System.out.println(mockedList.get(0));
    
     //following throws runtime exception
     System.out.println(mockedList.get(1));
    
     //following prints "null" because get(999) was not stubbed
     System.out.println(mockedList.get(999));
    
     //Although it is possible to verify a stubbed invocation, usually it's just redundant
     //If your code cares what get(0) returns, then something else breaks (often even before verify() gets executed).
     //If your code doesn't care what get(0) returns, then it should not be stubbed. Not convinced? See here.
     verify(mockedList).get(0);
    
  • デフォルトでは、すべてのメソッドに戻り値があり、mockはnull、空のセット、パッケージタイプを返します.例えばintは0、booleanはfalse
  • を返す.
  • stubbingは書き換えることができます.例えば、一般的なstubは設定を固定することができますが、テスト方法はそれを上書きすることができます.overriddingルートは潜在的なコード味であり、多くのルート
  • を指すことに注意してください.
  • stubbingが作成されると、テストメソッドが何回呼び出されても、stubが2回繰り返される値//が返されます.以下に「second」:when(mockedList.get(0))を返す.thenReturn(“first”).thenReturn(“second”); ただし、実際に呼び出された回数がstubが過ぎた回数を超えると、最後のstubの値が返されます.
  • パラメータマッチング
  • 
     //stubbing using built-in anyInt() argument matcher
     when(mockedList.get(anyInt())).thenReturn("element");
    
     //stubbing using custom matcher (let's say isValid() returns your own matcher implementation):
     when(mockedList.contains(argThat(isValid()))).thenReturn("element");
    
     //following prints "element"
     System.out.println(mockedList.get(999));
    
     //you can also verify using an argument matcher
     verify(mockedList).get(anyInt());
    
     //argument matchers can also be written as Java 8 Lambdas
     verify(mockedList).add(someString -> someString.length() > 5);
  • あるタイプの値を入力して結果を返すには、どうすればいいですか?
  • stubbingは内蔵anyint()matcherを使用した.anyint()に加えて他のタイプのmatcherがありますが、呼び出しメソッドが複数のパラメータを入力する必要がある場合、そのうちの1つがパラメータmatcherを使用する場合、すべてのパラメータがmatcher
  • を使用する必要があります.
  • 私たちの多くのタイプは内蔵のいくつかのタイプではありません.私たちは自分でクラスや特殊なオブジェクトを書く必要があります.このとき、matcherを定義する必要があります.
  • 呼び出し回数のチェック
  • 
     //using mock
     mockedList.add("once");
    
     mockedList.add("twice");
     mockedList.add("twice");
    
     mockedList.add("three times");
     mockedList.add("three times");
     mockedList.add("three times");
    
     //following two verifications work exactly the same - times(1) is used by default
     verify(mockedList).add("once");
     verify(mockedList, times(1)).add("once");
    
     //exact number of invocations verification
     verify(mockedList, times(2)).add("twice");
     verify(mockedList, times(3)).add("three times");
    
     //verification using never(). never() is an alias to times(0)
     verify(mockedList, never()).add("never happened");
    
     //verification using atLeast()/atMost()
     verify(mockedList, atLeastOnce()).add("three times");
     verify(mockedList, atLeast(2)).add("five times");
     verify(mockedList, atMost(5)).add("three times");
  • メソッド呼び出し時に例外
  • を投げ出す.
    doThrow(new RuntimeException()).when(mockedList).clear();
    また、doReturn()など、似たような方法もいくつか紹介します.
  • 検証メソッド呼び出し順序
  • //次のコード検証firstMockが先に呼び出され、secondMockが呼び出されます.
    inOrder.verify(firstMock).add(“was called first”);
    inOrder.verify(secondMock).add(“was called second”);
    ここまで書いておきましょう.仕事が終わってから次の編を整理します.