ホームページ > Java > &#&チュートリアル > Mockito を使用して「new()」呼び出しでクラスをモックするにはどうすればよいですか?

Mockito を使用して「new()」呼び出しでクラスをモックするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-10-30 00:23:29
オリジナル
703 人が閲覧しました

How Can You Mock a Class with a `new()` Call Using Mockito?

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

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