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

Mockito: `doReturn()` と `when()` – いつモッキングにどちらを使用する必要がありますか?

Linda Hamilton
リリース: 2024-12-09 16:01:16
オリジナル
1003 人が閲覧しました

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

Mockito - モッキングのための doReturn() と when() の違いを調べる

Spring MVC アプリケーションで Mockito の機能を利用する場合、開発者はdoReturn(...).when(...) とwhen(...).thenReturn(...)。これにより、見かけ上の同等性を考慮すると、なぜこれら 2 つのメソッドが存在するのかという疑問が生じます。

どちらのアプローチでも、@Mock アノテーションが付けられたモックでは同じ結果が得られますが、@Spy アノテーションが付けられたスパイ対象オブジェクトを使用する場合には、微妙な違いが現れます。指定された値を返す前に実際のメソッド呼び出しを実行する when(...).thenReturn(...) とは異なり、doReturn(...) はメソッド呼び出しを完全にバイパスします。

この区別は、次の場合に重要になります。例外をスローするメソッドを持つスパイされたオブジェクトを処理します。たとえば、2 つのメソッドを持つ次のクラスを考えてみましょう:

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

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

テスト クラス内:

@Spy
private MyClass myClass;

// ...

// Executes methodToBeTested() and swallows the NullPointerException
doReturn("test").when(myClass).anotherMethodInClass();

// Throws NullPointerException without executing methodToBeTested()
when(myClass.anotherMethodInClass()).thenReturn("test");
ログイン後にコピー

示されているように、doReturn(...) を使用すると戻り値を制御できます。メソッドの実行をトリガーすることはありませんが、 when(...) は最初にメソッドを実行し、その後でのみ指定された結果を提供します。この微妙な違いにより、オブジェクトのモック化と例外管理をより細かく制御できるようになり、例外をスローする可能性のあるスパイ対象オブジェクトを処理する場合には doReturn(...) が推奨される選択肢になります。

以上がMockito: `doReturn()` と `when()` – いつモッキングにどちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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