Как издеваться над одним методом в 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.
}
}
Ответы
Ответ 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()
.