Mockitoによるmock戻り値タイプvoidのメソッド


開発中に依存しているインタフェースがまだ開発されていない場合や、インタフェースがまだ調整されていない場合などは、Mockitoを使用してインタフェースをmockし、論理をテストすることができ、非常に使いやすいです.
最近開発中にvoidに対して値のタイプを返す方法Mockを使って、1篇の悪くない文章を見て、翻訳して、みんなに役に立つことを望みます.
------------------------------------------------------------------------------------------------------------

1、概要


本稿の主な内容は,Mockitoを用いてmockに戻り値がない方法である.
次はテストのために用意されたクラスです.
public class MyList extends AbstractList {
  
    @Override
    public void add(int index, String element) {
        // no-op
    }
}

2、簡単なmockと検証


戻り値のない関数は、MockitoのdoNothing()、doThrow()およびdoAnswer()を使用してMockおよび検証できます.
@Test
public void whenAddCalledVerfied() {
    MyList myList = mock(MyList.class);
    doNothing().when(myList).add(isA(Integer.class), isA(String.class));
    myList.add(0, "");
  
    verify(myList, times(1)).add(0, "");
}

ただし、MockitoではdoNothing()は、戻り値のないメソッドmockのデフォルト動作です.
下のコードと上の等価
@Test
public void whenAddCalledVerfied() {
    MyList myList = mock(MyList.class);
    myList(0, "");
  
    verify(myList, times(1)).add(0, "");
}

DoThrow()では異常が発生します
@Test(expected = Exception.class)
public void givenNull_AddThrows() {
    MyList myList = mock(MyList.class);
    doThrow().when(myList).add(isA(Integer.class), isNull());
  
    myList.add(0, null);
}

次にdoAnswer()について説明します.

3、パラメータ取得


doNothing()というデフォルトの動作を書き換える重要な理由の一つは、パラメータを取得することです.
第2部の例のようにverify()によりパラメータがadd()関数に伝達されることを検証した.
では、パラメータを取得して他のことをする必要がある場合はどうすればいいのでしょうか.
まだdoNothing()を使う必要がありますが、ArgumentCaptorを使うだけです.
@Test
public void whenAddCalledValueCaptured() {
    MyList myList = mock(MyList.class);
    ArgumentCaptor valueCapture = ArgumentCaptor.forClass(String.class);
    doNothing().when(myList).add(any(Integer.class), valueCapture.capture());
    myList.add(0, "captured");
  
    assertEquals("captured", valueCapture.getValue());
}

 

4、voidにタイプを返す方法に対してanswerを構築する


メソッドは、値を追加するだけでは簡単ではないかもしれません.この場合、Answerクラスを使用して、私たちが必要とする他の動作を追加する必要があります.
@Test
public void whenAddCalledAnswered() {
    MyList myList = mock(MyList.class);
    doAnswer((Answer) invocation -> {
        Object arg0 = invocation.getArgument(0);
        Object arg1 = invocation.getArgument(1);
         
        assertEquals(3, arg0);
        assertEquals("answer me", arg1);
        return null;
    }).when(myList).add(any(Integer.class), any(String.class));
    myList.add(3, "answer me");

ここでもlambda式の使用をサポートします.

5、部分mock


 
MockitoのdoCallRealMethod()メソッドはvoid関数で使用できます.
@Test
public void whenAddCalledRealMethodCalled() {
    MyList myList = mock(MyList.class);
    doCallRealMethod().when(myList).add(any(Integer.class), any(String.class));
    myList.add(1, "real");
  
    verify(myList, times(1)).add(1, "real");
}

この関数を使用すると、元のオブジェクトの実際のメソッドを呼び出すとともに、検証を呼び出すことができます.

6、結論


この論文では,Mockitoの4つのvoid戻り値の関数をMockする方法を紹介した.
 
英文原文:https://www.baeldung.com/mockito-void-methods
ソース:https://github.com/eugenp/tutorials/tree/master/testing-modules/mockito