Подтвердить что ты не робот

Как издеваться над одним методом в java

Возможно ли выполнить Mock для одного метода класса 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.
    }
}
4b9b3361

Ответ 1

Использовать механизм spy Mockito's:

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

Использование шпиона вызывает поведение по умолчанию обернутого объекта для любого метода, который не был разрезан.

Mockito.spy()/@Spy

Ответ 2

Используйте метод spy() из Mockito и издевайтесь над следующим методом:

import static org.mockito.Mockito.*;

...

A a = spy(new A());
when(a.method1()).thenReturn(10L);

Ответ 3

Предполагая, что вы используете jmockit:

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

   mockedInstance.callSomemethod();
}

Ответ 4

Вы можете просто создать подкласс A, который переопределяет method1().