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