ホームページ > Java > &#&チュートリアル > Mockito: `doReturn()` と `when()`: スパイされたオブジェクトではどちらを使用する必要があるか?

Mockito: `doReturn()` と `when()`: スパイされたオブジェクトではどちらを使用する必要があるか?

Patricia Arquette
リリース: 2024-11-28 18:19:15
オリジナル
1037 人が閲覧しました

Mockito: `doReturn()` vs. `when()`: When Should You Use Which with Spied Objects?

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

モッキング フレームワーク Mockito を利用してテスト機能を強化する場合、開発者は doReturn() に遭遇することがよくあります。そして when() メソッド。どちらのメソッドもメソッド呼び出しをスタブ化するという目的を果たしますが、スパイされたオブジェクト (@Spy アノテーションが付けられている) を操作する場合、両者の間には微妙な違いがあります。

when(...).thenReturn(...) vs doReturn(...).when(...)

when(...).thenReturn(...):

  • 指定された値を返す前に実際のメソッドを呼び出します。
  • 呼び出されたメソッドが例外をスローした場合、それを処理するかモックする必要があります。

doReturn(...).when(...):

  • 実際のメソッド呼び出しを完全に回避します。

実践例

次のことを考えてみましょうMyClass:

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

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

によるテストSpy

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

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