Mockito を使用した New() 呼び出しによるクラスのモック
レガシー クラスは内部でオブジェクトをインスタンス化することが多く、モックを使用してテストすることが困難になりますMockito のようなフレームワーク。これは、外部セットアップを必要とするセキュリティ コンテキストなど、複雑な依存関係をセットアップするときに明らかになります。
クラス例を考えてみましょう:
<code class="java">public class TestedClass { public LoginContext login(String user, String password) { LoginContext lc = new LoginContext("login", callbackHandler); } }</code>
このクラスをテストしたいのですが、login()メソッドは LoginContext オブジェクトをインスタンス化し、コードをリファクタリングせずにモック化を複雑にします。
Mockito は LoginContext をモックできますか?
はい、Mockito を使用して LoginContext クラスをモック化することは可能です。スパイの強力な機能を利用します。スタブとは異なり、スパイは (メソッドがスタブ化されていない限り) スパイ対象のオブジェクトの実際のメソッドを呼び出します。
スパイを使用して LoginContext をモックする
ソース コードを変更せずに LoginContext を使用するには、次のアプローチを使用できます。
<code class="java">TestedClass tc = spy(new TestedClass()); LoginContext lcMock = mock(LoginContext.class); when(tc.login(anyString(), anyString())).thenReturn(lcMock);</code>
結論
スパイを戦略的に採用することで、オブジェクトを内部でインスタンス化するクラスを効果的にモックできます。たとえ元のコードが変更されていない場合でも。この手法を使用すると、そのようなクラスを効率的にテストし、その動作が期待どおりであることを確認できます。
以上がMockito を使用して「new()」呼び出しでクラスをモックするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。