Solución:
También quería que el captador devolviera el resultado de la reciente llamada de setter.
Teniendo
class Dog
{
private Sound sound;
public Sound getSound() {
return sound;
}
public void setSound(Sound sound) {
this.sound = sound;
}
}
class Sound
{
private String syllable;
Sound(String syllable) {
this.syllable = syllable;
}
}
Usé lo siguiente para conectar el setter al getter:
final Dog mockedDog = Mockito.mock(Dog.class, Mockito.RETURNS_DEEP_STUBS);
// connect getter and setter
Mockito.when(mockedDog.getSound()).thenCallRealMethod();
Mockito.doCallRealMethod().when(mockedDog).setSound(Mockito.any(Sound.class));
Puedo pensar en tres enfoques posibles.
-
No use
HttpServletRequest
directamente en su aplicación; cree una clase contenedora para él y tenga una interfaz para la clase contenedora. Dondequiera que use actualmenteHttpServletRequest
en la aplicación, utilice la interfaz en su lugar. Luego, en la prueba, tenga una implementación alternativa de esta interfaz. Entonces, no necesitas un simulacro de Mockito en absoluto. -
Tenga un campo en su clase de prueba que almacene el valor que ha establecido el
String
para. Haz dos MockitoAnswer
objetos; uno que devuelve el valor de este campo cuandogetString
se llama, y otro que establece el valor de este campo cuandosetString
se llama. Haga un simulacro de la manera habitual y aplíquelo para usar ambas respuestas. -
Cree una clase abstracta (que puede ser una clase interna estática de su clase de prueba) que implemente el
HttpServletRequest
interfaz, pero tiene el campo que desea establecer y define el getter y el setter. Luego simule la clase abstracta y pase el Mockito.CALLS_REAL_METHODS como una respuesta predeterminada. Cuando llamas al getter o al setter en el simulacro, el método real se activará, que es el comportamiento que deseas.
Con suerte, una de estas tres alternativas satisfará sus necesidades.