ホームページ > Java > &#&チュートリアル > Mockito: `doReturn()` と `when()`: いつどちらを使用する必要がありますか?

Mockito: `doReturn()` と `when()`: いつどちらを使用する必要がありますか?

Barbara Streisand
リリース: 2024-11-28 03:44:10
オリジナル
969 人が閲覧しました

Mockito: `doReturn()` vs. `when()`: When Should I Use Which?

Mockito: doReturn() と when() の違いを理解する

Mockito の doReturn() の間で混乱が生じるのは当然です... when() メソッドと when()...thenReturn() メソッド。これらは同じことをしているように見えるかもしれません。どちらもメソッド呼び出しをモックして事前定義された値を返すことができますが、モック (@Mock のアノテーションが付けられた) の代わりにスパイされたオブジェクト (@Spy のアノテーションが付けられた) を使用する場合に関連する微妙な違いがあります。

キー違い: メソッド呼び出しの動作

決定的な違いは、スパイと対話するときにこれらのメソッドがどのように動作するかにあります。オブジェクト:

  • when()...thenReturn() 指定された値を返す前に実際のメソッド呼び出しを行います。これは、実際のメソッドによってスローされた例外はすべて処理する必要があることを意味します。
  • doReturn()...when() メソッドはまったく呼び出されません。代わりに、事前定義された値を直接返します。これにより、実際のメソッド呼び出しがバイパスされます。

違いを示す例:

次のコードを考えてみましょう:

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート