Saltar al contenido

Mockito: cómo stub getter setter

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.

  1. 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 actualmente HttpServletRequest 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.

  2. Tenga un campo en su clase de prueba que almacene el valor que ha establecido el String para. Haz dos Mockito Answer objetos; uno que devuelve el valor de este campo cuando getString se llama, y ​​otro que establece el valor de este campo cuando setString se llama. Haga un simulacro de la manera habitual y aplíquelo para usar ambas respuestas.

  3. 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *