ホームページ  >  記事  >  Java  >  Mockitoを使用してスーパークラス内の特定のメソッド呼び出しのみをモックするにはどうすればよいですか?

Mockitoを使用してスーパークラス内の特定のメソッド呼び出しのみをモックするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-31 06:17:02937ブラウズ

How to Mock Only a Specific Method Call in a Superclass with Mockito?

Mockito を使用してスーパークラスの特定のメソッド呼び出しのみをモックする

Mockito を使用して単体テストを実行する場合、特定のメソッド呼び出しのみをモックする必要がある場合があります。他の呼び出しには影響を与えずに、スーパークラス内のメソッドを呼び出します。次のシナリオを考えてみましょう:

<code class="java">class BaseService {  
    public void save() {...}  
}

public Childservice extends BaseService {  
    public void save(){  
        //some code  
        super.save();
    }  
}</code>

この例では、ChildService クラス内の super.save() への呼び出しのみをモックし、他の save() メソッド呼び出しの動作を保持します。

スパイとスタブを使用した解決策

リファクタリングは実行可能かもしれないが解決策ですが、常に実現できるとは限りません。このような場合、スパイおよびスタブ手法を活用して、目的のモッキング動作を実現できます。

<code class="java">@Test
public void testSave() {
    ChildService classToTest = Mockito.spy(new ChildService());

    // Prevent/stub logic in super.save()
    Mockito.doNothing().when((BaseService)classToTest).validate();

    // When
    classToTest.save();

    // Then
    verify(classToTest).load();
}</code>

説明:

  1. ChildService のインスタンスを作成します。 Mockito の spy() メソッドを使用するクラス。これにより、メソッドを選択的にモックするために使用できるスパイ オブジェクトが作成されます。
  2. モックしたくないメソッドをスーパークラスにスタブします。これは、Mockito.doNothing() を使用して行われます。この例では、スーパークラスの validate() メソッドがスタブ化されています。
  3. スパイ オブジェクトに対してアクションを実行します (この場合、save() を呼び出します)。
  4. 特定のメソッドが有効であることを確認します。スパイ オブジェクトに対して呼び出しが行われました (この場合、load() が検証されます)。

スパイとスタブ化すると、目的のモック動作を効果的にシミュレートできるため、元の機能を維持しながらスーパークラス内の特定のメソッド呼び出しをテストできます。

以上がMockitoを使用してスーパークラス内の特定のメソッド呼び出しのみをモックするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。