2015-04-21 6 views
1

Я хочу использовать, когда (шпион) .thenAnswer (new Answer (0) Но кажется, что thenAnswer работает только на макет, а не на шпиона. Я хочу использовать шпион, поскольку я хочу только заглушить конкретный метод.Mockito Использование doAnswer на Spy

Есть ли способ ответить на объект шпиона?

ответ

6

Как указано в 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"; 
    } 
}); 
+0

Жаль, что я не написал, но с курса я использую метод, когда (spy.method()). ThenAnswer (новый ответ()) –

+0

И ваш метод() недействительным или он что-то возвращает? – Virginie

+0

Этот ответ спас меня ... Я боролся со вчерашнего дня, пытаясь понять, почему, когда(), то (ответ); ... Это была головная боль ... Я просто попробовал doAnswer(), когда() и работает отлично ... –

2

Посмотрев на ваш код, я нашел проблему При использовании шпиона нам нужно e

doAnswer.(new Answer<T>() {..}).when(spy).method() 

И НЕ !!!

when(spy.method()).thenAnswer(new Answer<T>() {..}) 

Благодаря

+0

Обратите внимание, что мой метод с параметрами spy.method (arg) –