Я новичок в PowerMockito, и есть поведение, которое он показывает, чего я не понимаю. Следующий код объясняет мой вопрос:PowerMockito вызывает метод, когда я использую doReturn (..). Когда (....)
public class ClassOfInterest {
private Object methodIWantToMock(String x) {
String y = x.trim();
//Do some other stuff;
}
public void methodUsingThePrivateMethod() {
Object a = new Object();
Object b = methodIWantToMock("some string");
//Do some other stuff ...
}
}
У меня есть класс, который содержит приватный метод, который я хочу псевдотрансфицированные называется methodIWantToMock(String x)
. В моем тестовом коде, я делаю следующее:
@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassOfInterest.class)
public class ClassOfInterestTest {
@Test
public void someTestMethod() {
ClassOfInterest coiSpy = PowerMockito.spy(new ClassOfInterest());
PowerMockito.doReturn(null).when(coiSpy, "methodIWantToMock", any(String.class));
coiSpy.methodUsingThePrivateMethod();
//Do some stuff ...
}
}
В соответствии с вышеуказанным кодом, PowerMockito должен просто возвращать нуль, когда methodIWantToMock
вызывается внутри methodUsingThePrivateMethod()
когда я запустить тест выше. Однако на самом деле происходит то, что когда эта команда запущена: PowerMockito.doReturn(...).when(...)
, PowerMockito на самом деле звонит methodIWantToMock
прямо сейчас и там! Почему это так? На этом этапе я хотел только указать, как он должен макет частного метода, когда он в конечном итоге вызывается при запуске линии coiSpy.methodUsingThePrivateMethod();
.
Вы вызываете 'methodUsingThePrivateMethod()' на макете объекта, который, в свою очередь, вызывающий 'methodIWantToMock («некоторые строки»)' внутренне. Какое поведение вы ожидали здесь? –
Это правильно, однако через отладку я обнаружил, что PowerMockito вызывает 'methodIWantToMock()', когда я запускаю 'doReturn(). When()' command. Он не ждет 'methodUsingThePrivateMethod()', чтобы вызвать его. – Ahmad
Я нашел это поведение путем отладки. Если я запускаю тест (без отладки), тест выходит из строя из-за 'NullPointerException', сгенерированного, потому что, когда выполняется команда' doReturn (...). When (...) ', PowerMockito запускает закрытый метод при передаче' null' в качестве ввода, и поэтому, когда 'String y = x.trim();' выполняется внутри 'methodUsingThePrivateMethod()', генерируется «NullPointerException». Нижняя строка === команда 'coiSpy.methodUsingThePrivateMethod();' НИКОГДА НЕ ВКЛЮЧАЕТ. – Ahmad