2016-11-22 3 views
1

При использовании Mockito вы можете окурок на вызов метода, как:Как окурок последовательных вызовов с обратными вызовами в Mockito

when(mock.someMethod("some arg")) 
    .thenThrow(new RuntimeException()) 
    .thenReturn("foo"); 

Но когда ваш метод возвращает void вам нужно окурок с этим форматом:

doAnswer(new Answer() {..).when(mock). someMethod("some arg"); 

Представьте меня Worker.class как этот

class Worker { 

    void doWork(Callback callback) { 
     boolean success= ...; 
     if(success){ 
      callback.onSuccess(); 
     }else { 
      callback.onFail(); 
     } 
    } 

} 

Вы можете окурок с Падения с этим кодом:

doAnswer(new Answer() { 
     @Override 
     public Object answer(InvocationOnMock invocation) throws Throwable { 
      Callback callback= invocation.getArguments()[0]; 
      callback.onSuccess(); 
      return null; 
     } 
    }).when(mockWorker).doWork(any(Callback.class)); 

Теперь представьте себе, я хочу незавершенное, что три последовательных вызовов к рабочим позвонить onFail, onSuccess, onFail, как я могу это сделать? Нужно ли мне переконфигурировать макет внутри каждого звонка answer(InvocationOnMock invocation)?

ответ

2

Okey нашел ответ. Вам просто нужно направить вызовы на doAnswer:

doAnswer(new Answer() { 
    @Override 
    public Object answer(InvocationOnMock invocation) throws Throwable { 
     Callback callback= invocation.getArguments()[0]; 
     callback.onFail(); 
     return null; 
    } 
}). 
doAnswer(new Answer() { 
    @Override 
    public Object answer(InvocationOnMock invocation) throws Throwable { 
     Callback callback= invocation.getArguments()[0]; 
     callback.onSuccess(); 
     return null; 
    } 
}). 
doAnswer(new Answer() { 
    @Override 
    public Object answer(InvocationOnMock invocation) throws Throwable { 
     Callback callback= invocation.getArguments()[0]; 
     callback.onFail(); 
     return null; 
    } 
}).when(mockWorker).doWork(any(Callback.class)); 
Смежные вопросы