ホームページ > Java > &#&チュートリアル > Mockito Spy:同じクラスの例でメソッドをock笑する

Mockito Spy:同じクラスの例でメソッドをock笑する

Robert Michael Kim
リリース: 2025-03-07 18:05:45
オリジナル
569 人が閲覧しました

mockito spy:同じクラスの例でメソッドをmock笑する

この例は、モッキートのspy機能を使用してクラス内の特定のメソッドを模倣する方法を示しています。 MyClass

public class MyClass {
    public int add(int a, int b) {
        return a + b + internalMethod();
    }

    private int internalMethod() {
        return 5; // This is the method we want to isolate
    }

    public int anotherMethod() {
        return 10;
    }
}
ログイン後にコピー

というクラスがあるとしましょう。スパイを使用して、addinternalMethodinternalMethod

を模倣することができます。この例では、
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

public class MyClassTest {
    @Test
    void testAddMethod() {
        MyClass myClassSpy = spy(MyClass.class);
        when(myClassSpy.internalMethod()).thenReturn(10); // Mock the internal method

        int result = myClassSpy.add(2, 3);
        assertEquals(15, result); // 2 + 3 + 10 = 15
    }
}
ログイン後にコピー
のスパイを作成します。 次に、

を使用して、MyClassをスタブにして10を返し、その動作をwhen(myClassSpy.internalMethod()).thenReturn(10);メソッドのテストから分離します。次に、モックされたinternalMethodaddaddを使用して、internalMethodメソッドが正しく動作することを確認します。モッキートの機能を使用して、クラス内の特定のメソッドを分離してテストするにはどうすればよいですか? これは、特定の方法を選択的にock笑しながら、ほとんどの方法の実際の実装を保持できることを意味します。 それを使用するには、

を使用してスパイを作成します。 次に、Mockitoの

メソッドを使用して、ockしたい方法の動作を指定します。 たとえば、spy

これにより、スパイオブジェクトが作成されますspyMockito.spy(yourObject)onwhen()への呼び出しは10を返します。他のすべてのメソッドは実際の実装を使用します。これにより、特定の方法の動作をクラスの他の部分から単独で隔離したターゲットテストが可能になります。 mockしたい方法の動作を定義するには、

を使用する必要があることを忘れないでください。それ以外の場合は、実際の実装を呼び出します。
MyClass myClass = new MyClass();
MyClass myClassSpy = spy(myClass);
when(myClassSpy.internalMethod()).thenReturn(10); // Mock only internalMethod
ログイン後にコピー

同じクラス内のテスト方法をテストする際のモックと比較してモック酸スパイを使用する潜在的な落とし穴は何ですか?myClassSpyinternalMethodスパイは実際の実装との相互作用をテストする利点を提供しますが、それらはいくつかの潜在的な落とし穴を導入します:myClassSpy>>

  • 意図しない副作用:スパイは元の実装を保持しているため、詰められていないメソッドの副作用は引き続き発生します。これにより、テスト中に予期しない動作が発生し、テスト中のユニットを分離することが困難になります。 オブジェクトの状態を変更すると、返品値をmock笑しても、その変更がまだ発生します。internalMethod
  • デバッグが難しい:予期しない動作が発生した場合、エラーのソースを特定することは困難です。これは、テスト中の方法の問題ですか、それとも非ロックされていない方法からの副作用ですか? 機能が同じままであっても、実装の変更はテストを破る可能性があります。
  • 不必要な複雑さ:単純なモックを使用してメソッドを効果的にテストできれば、スパイの複雑さを追加する必要はありません。 モッキングは一般によりシンプルで、予期しない副作用が発生しやすくなります。
  • 単体テスト中に内部メソッドコールを扱うときにモックよりモックスパイを選択する必要がありますか?

以上がMockito Spy:同じクラスの例でメソッドをock笑するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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