El problema con el uso de RETURN_DEEP_STUBS es que obtendrá una simulación diferente cada vez que llame a un método. Creo que a partir de su pregunta, quiere utilizar una respuesta predeterminada que realmente devuelve el simulacro en el que se llamó, para cada método que tenga el tipo de devolución correcto. Esto podría parecerse a lo siguiente. Tenga en cuenta que no he probado esto, por lo que puede contener errores tipográficos, pero espero que la intención sea clara en cualquier caso.
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);
}
}
}
Luego, cuando cree su simulacro, especifique esto como su respuesta predeterminada. Esto hará que su simulacro regrese de cada método que pueda; pero se comportará como un simulacro común cuando llamas a un método cuyo tipo de devolución es incorrecto para el simulacro.
Crear su maqueta como esto
Builder mockBuilder = mock(Builder.class, new SelfReturningAnswer());
o cree una constante para esta clase y escribir algo como
@Mock(answer = SELF_RETURNING) private Builder mockBuilder;
Espero que ayude.
¿Realmente necesitas burlarte de esto? No parece el tipo de dependencia que vale la pena burlarse. Parece un tipo de clase de "datos", en lugar de un tipo de clase de "servicio". Raramente encuentro que es útil hacer clases donde no hay mucho comportamiento real. –
Es solo un ejemplo, el verdadero constructor es un poco más complejo y simplemente no es necesario probarlo en este caso. –
¿Puedes separarlos para que * tengas * un "constructor tonto" (que no necesita burla) y luego la parte del servicio que * necesita * burla? –