この例は、モッキートの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; } }
というクラスがあるとしましょう。スパイを使用して、add
:internalMethod
internalMethod
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);
メソッドのテストから分離します。次に、モックされたinternalMethod
。add
add
を使用して、internalMethod
メソッドが正しく動作することを確認します。モッキートの機能を使用して、クラス内の特定のメソッドを分離してテストするにはどうすればよいですか? これは、特定の方法を選択的にock笑しながら、ほとんどの方法の実際の実装を保持できることを意味します。 それを使用するには、
spy
これにより、スパイオブジェクトが作成されますspy
。 Mockito.spy(yourObject)
onwhen()
への呼び出しは10を返します。他のすべてのメソッドは実際の実装を使用します。これにより、特定の方法の動作をクラスの他の部分から単独で隔離したターゲットテストが可能になります。 mockしたい方法の動作を定義するには、
MyClass myClass = new MyClass(); MyClass myClassSpy = spy(myClass); when(myClassSpy.internalMethod()).thenReturn(10); // Mock only internalMethod
同じクラス内のテスト方法をテストする際のモックと比較してモック酸スパイを使用する潜在的な落とし穴は何ですか?myClassSpy
internalMethod
スパイは実際の実装との相互作用をテストする利点を提供しますが、それらはいくつかの潜在的な落とし穴を導入します:myClassSpy
>>
internalMethod
以上がMockito Spy:同じクラスの例でメソッドをock笑するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。