ホームページ > Java > &#&チュートリアル > Mockito の doReturn() と when(): スパイされたオブジェクトを使用するときの違いは何ですか?

Mockito の doReturn() と when(): スパイされたオブジェクトを使用するときの違いは何ですか?

Barbara Streisand
リリース: 2024-12-16 17:28:10
オリジナル
541 人が閲覧しました

Mockito's doReturn() vs. when(): What's the Difference When Using Spied Objects?

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

Spring MVC アプリケーションの開発中に、サービス層を模擬するための Mockito の使用オブジェクトは一般的な方法です。 Mockito の機能を調べていると、 doReturn(...).when(...) と when(...).thenReturn(...) の両方が同じ機能を実行しているように見えることが明らかになります。ここで疑問が生じます: これら 2 つのメソッドには違いはありますか?

doReturn() と when() の重要な違いは、モック (@ の注釈が付けられた) の代わりにスパイされたオブジェクト (@Spy の注釈が付けられた) を使用する場合に明らかになります。 Mock).

doReturn() と Spied の when() の比較Objects

  • doReturn(...).when(...): 実際にメソッドを呼び出さずに、メソッドの戻り値を変更できます。
  • >
  • when(...).thenReturn(...): 指定されたメソッドを返す前に実際のメソッドの実行を呼び出します。 value.

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

public class MyClass {
    protected String methodToBeTested() {
        return anotherMethodInClass();
    }

    protected String anotherMethodInClass() {
        throw new NullPointerException();
    }
}
ログイン後にコピー

テスト ケース:

@Spy
private MyClass myClass;

// Works fine, does not invoke anotherMethodInClass()
doReturn("test").when(myClass).anotherMethodInClass();

// Throws NullPointerException because anotherMethodInClass() is invoked
when(myClass.anotherMethodInClass()).thenReturn("test");
ログイン後にコピー

要約すると、スパイされたオブジェクトを使用する場合、doReturn()メソッドの実行をスキップして戻り値を直接設定できますが、 when() は目的の値を返す前に実際のメソッドを呼び出します。 Mockito でスパイ対象オブジェクトを操作する場合、この理解は非常に重要です。

以上がMockito の doReturn() と when(): スパイされたオブジェクトを使用するときの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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