Mockito.when(Object)は引数のタイプセーフで読みやすいため(特に連続した呼び出しをスタブする場合)、スタブには常に推奨されることに注意してください。
doReturn()が便利になるまれなケースを以下に示します。
1.実際のオブジェクトをスパイしてスパイで実際のメソッドを呼び出すと、副作用が発生する
List list = new LinkedList(); List spy = spy(list);
//不可能:実際のメソッドが呼び出されるため、spy.get(0)はIndexOutOfBoundsExceptionをスローします(リストはまだ空です)
when(spy.get(0)).thenReturn("foo");
//スタブにはdoReturn()を使用する必要があります:
doReturn("foo").when(spy).get(0);
2.以前の例外スタブをオーバーライドします。
when(mock.foo()).thenThrow(new RuntimeException());
//不可能:例外スタブfoo()メソッドが呼び出されるため、RuntimeExceptionがスローされます。 when(mock.foo()).thenReturn("bar");
//スタブにはdoReturn()を使用する必要があります:
doReturn("bar").when(mock).foo();
上記のシナリオは、Mockitoのエレガントな構文のトレードオフを示しています。ただし、シナリオは非常にまれです。スパイは散発的である必要があり、例外スタブのオーバーライドは非常にまれです。言うまでもなく、一般的にスタブをオーバーライドすることは、スタブが多すぎることを指摘する潜在的なコード臭です。
doReturn()
役立ついくつかのケースがあります。