Проблема с использованием RETURN_DEEP_STUBS заключается в том, что вы будете получать разные макеты при каждом вызове метода.Я думаю из вашего вопроса, что вы хотите использовать ответ по умолчанию, который фактически возвращает макет, для которого он был вызван, для каждого метода, который имеет правильный тип возвращаемого значения.Это может выглядеть примерно так:Обратите внимание, что я не проверял это, поэтому он может содержать опечатки, но я надеюсь, что намерение ясно в любом случае.
import static org.mockito.Mockito.RETURNS_DEFAULTS;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
public class SelfReturningAnswer implements Answer<Object>{
public Object answer(InvocationOnMock invocation) throws Throwable {
Object mock = invocation.getMock();
if( invocation.getMethod().getReturnType().isInstance( mock )){
return mock;
}
else{
return RETURNS_DEFAULTS.answer(invocation);
}
}
}
Затем, когда вы создаете макет, укажите это как ответ по умолчанию,Это заставит ваш макет возвращать себя из каждого метода, который он может;но он будет вести себя как обычный макет, когда вы вызываете метод, тип возвращаемого значения которого неправильный для макета.
Создайте свой макет следующим образом
Builder mockBuilder = mock( Builder.class, new SelfReturningAnswer());
или создайте константу для этого класса инапишите что-нибудь вроде
@Mock( answer = SELF_RETURNING ) private Builder mockBuilder;
Надеюсь, это поможет.