Как указано в OFFICAL documentation, можно и иногда даже советуют:
Важно Гоча на шпионит реальные объекты!
Иногда невозможно или нецелесообразно использовать (Object) для шпионов. Поэтому при использовании шпионов, пожалуйста, рассмотрите метод doReturn | Answer | Throw() для stubbing.
Но, опять же, как doc состояний:
гася пустотами требует иного подхода от того, когда (Object), потому что компилятор не любит недействительные методы внутри скобок ...
Является ли ваш метод недействительным?
Пример из документации, если аннулируются:
doAnswer(new Answer() {
public Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
Mock mock = invocation.getMock();
return null;
}}).when(mock).someMethod();
Таким образом, вы должны использовать следующий код, если ваш метод является недействительным:
MyObject spy = spy(myObject);
doAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
return null;
}
}).when(spy).notify();
Или, если это не пустота:
when(spy.toString()).thenAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
return "this";
}
});
Жаль, что я не написал, но с курса я использую метод, когда (spy.method()). ThenAnswer (новый ответ()) –
И ваш метод() недействительным или он что-то возвращает? – Virginie
Этот ответ спас меня ... Я боролся со вчерашнего дня, пытаясь понять, почему, когда(), то (ответ); ... Это была головная боль ... Я просто попробовал doAnswer(), когда() и работает отлично ... –