Следующее может использоваться как общий метод для возврата разных аргументов при разных вызовах методов. Единственное, что нам нужно сделать, - это передать массив с порядком, в котором объекты должны извлекаться при каждом вызове.
@SafeVarargs
public static <Mock> Answer<Mock> getAnswerForSubsequentCalls(final Mock... mockArr) {
return new Answer<Mock>() {
private int count=0, size=mockArr.length;
public Mock answer(InvocationOnMock invocation) throws throwable {
Mock mock = null;
for(; count<size && mock==null; count++){
mock = mockArr[count];
}
return mock;
}
}
}
Ex. getAnswerForSubsequentCalls(mock1, mock3, mock2);
вернет объект mock1 при первом вызове, объект mock3 при втором вызове и объект mock2 при третьем вызове.
Должен использоваться как when(something()).doAnswer(getAnswerForSubsequentCalls(mock1, mock3, mock2));
Это почти похоже на when(something()).thenReturn(mock1, mock3, mock2);