38

Javaクラスの単一のメソッドをモックすることは可能ですか?

例えば:

class A {
    long method1();
    String method2();
    int method3();
}


// in some other class
class B {
    void someMethod(A a) {
       // how would I mock A.method1(...) such that a.method1() returns a value of my
       // choosing;
       // whilst leaving a.method2() and a.method3() untouched.
    }
}
4

5 に答える 5

79

Mockito'sスパイメカニズムを使用する:

A a = new A();
A aSpy = Mockito.spy(a);
Mockito.when(aSpy.method1()).thenReturn(5l);

スパイを使用すると、スタブされていないメソッドのラップされたオブジェクトのデフォルトの動作が呼び出されます。

Mockito.spy() / @Spy

于 2012-06-05T10:29:14.100 に答える
8

spy()Mockitoのメソッドを使用し、次のようにメソッドをモックします。

import static org.mockito.Mockito.*;

...

A a = spy(new A());
when(a.method1()).thenReturn(10L);
于 2012-06-05T10:31:39.473 に答える
1

jmockit を使用していると仮定します。

public void testCase(@Mocked("methodToBeMocked") final ClassBoBeMocked mockedInstance) {
           new Expectations() {{
                   mockedInstance.methodToBeMocked(someParameter); returns(whateverYouLikeItToReturn);
           }}

   mockedInstance.callSomemethod();
}
于 2012-06-05T10:31:29.607 に答える
-3

Aをオーバーライドするサブクラスを作成するだけで済みますmethod1()

于 2012-06-05T10:32:49.980 に答える