Mockito: doReturn() と when() の違いを理解する
Mockito の doReturn() の間で混乱が生じるのは当然です... when() メソッドと when()...thenReturn() メソッド。これらは同じことをしているように見えるかもしれません。どちらもメソッド呼び出しをモックして事前定義された値を返すことができますが、モック (@Mock のアノテーションが付けられた) の代わりにスパイされたオブジェクト (@Spy のアノテーションが付けられた) を使用する場合に関連する微妙な違いがあります。
キー違い: メソッド呼び出しの動作
決定的な違いは、スパイと対話するときにこれらのメソッドがどのように動作するかにあります。オブジェクト:
違いを示す例:
次のコードを考えてみましょう:
public class MyClass { public String methodToBeTested() { return anotherMethodInClass(); } public String anotherMethodInClass() { throw new NullPointerException(); } }
スパイを使用してテストするobject:
@Spy private MyClass myClass; // ... // This approach will work without throwing an exception doReturn("test").when(myClass).anotherMethodInClass(); // This approach will throw a NullPointerException when(myClass.anotherMethodInClass()).thenReturn("test");
スパイされたオブジェクトでは、when()...thenReturn() が anotherMethodInClass() を呼び出そうとしますが、これにより NullPointerException がスローされます。対照的に、doReturn()...when() はメソッドの呼び出しを回避し、例外を抑制して "test" を直接返します。
結論
これらの違いスパイされたオブジェクトを使用する場合、2 つの方法が明らかになります。スパイされたオブジェクトの場合、 doReturn()...when() は、実際のメソッド呼び出しをバイパスし、事前定義された値を直接返すことで、より優れた制御を提供します。対照的に、when()...thenReturn() は実際のメソッドを呼び出すため、例外やその他の意図しない動作が発生する可能性があります。したがって、適切なメソッドの選択は、目的の動作と、モック オブジェクトを使用しているかスパイ オブジェクトを使用しているかによって異なります。
以上がMockito: `doReturn()` と `when()`: いつどちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。