モッキング フレームワーク Mockito を利用してテスト機能を強化する場合、開発者は doReturn() に遭遇することがよくあります。そして when() メソッド。どちらのメソッドもメソッド呼び出しをスタブ化するという目的を果たしますが、スパイされたオブジェクト (@Spy アノテーションが付けられている) を操作する場合、両者の間には微妙な違いがあります。
when(...).thenReturn(...):
doReturn(...).when(...):
次のことを考えてみましょうMyClass:
public class MyClass { protected String methodToBeTested() { return anotherMethodInClass(); } protected String anotherMethodInClass() { throw new NullPointerException(); } }
doReturn(...).when(...):
@Spy private MyClass myClass; // Works as expected doReturn("test").when(myClass).anotherMethodInClass();
when(...).thenReturn(.. .):
// Throws a NullPointerException when(myClass.anotherMethodInClass()).thenReturn("test");
このシナリオでは、doReturn() により、anotherMethodInClass() の例外が目的の値を返しながらも回避されます。対照的に、when() は実際のメソッド呼び出しをトリガーし、結果として NullPointerException がスローされます。
したがって、スパイされたオブジェクトを操作する場合、doReturn() と when() のどちらを選択するかは、メソッド呼び出しを呼び出すかどうかによって決まります。実際のメソッドを使用するか、完全にバイパスします。
以上がMockito: `doReturn()` と `when()`: スパイされたオブジェクトではどちらを使用する必要があるか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。