Pregunta

Supongamos que tengo una clase con una propiedad privada y un getter público asociado y setter. Quiero probar con PhPunit que la propiedad obtiene el valor correcto después de que se haya utilizado el setter o que el Getter devuelva la propiedad correcta.

Por supuesto, puedo probar el setter usando el Getter para ver que el objeto almacena el valor correcto, y viceversa para probar el Getter. Sin embargo, esto no garantiza que la propiedad privada sea la que se está estableciendo.

Digamos que tenía la siguiente clase. Creé una propiedad, getter y setter. Pero hice un error tipográfico en el nombre de la propiedad, por lo que el Getter y el Setter en realidad no manipulan la propiedad que están destinados a manipular

class SomeClass
{
    private 
        $mane = NULL; // Was supposed to be $name but got fat-fingered!

    public function getName ()
    {
        return ($this -> name);
    }

    public function setName ($newName)
    {
        $this -> name = $newName;
        return ($this);
    }
}

Si ejecuto la siguiente prueba

public function testSetName ()
{
    $this -> object -> setName ('Gerald');
    $this -> assertTrue ($this -> object -> getName () == 'Gerald');
}

Recibiría un pase. Sin embargo, algo muy malo ha sucedido que no quiero. Cuando se llama a SetName (), en realidad crea una nueva propiedad en la clase con el nombre que pensé que mi propiedad privada tenía, ¡solo la que crea el setter es pública! Puedo demostrar eso con el siguiente código:

$a  = new SomeClass;

$a -> setName('gerald');
var_dump ($a -> getName ());
var_dump ($a -> name);

Saliría:

cadena (6) "Gerald"

cadena (6) "Gerald"

¿Hay alguna forma de acceder a las propiedades privadas desde Phpunit para que pueda escribir pruebas que se aseguren de que las propiedades que creo que se están obteniendo y realmente se están obteniendo?

¿O hay alguna otra cosa que debería estar haciendo en una prueba para detectar problemas como este sin tratar de obtener acceso al estado privado del objeto bajo prueba?

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top