Question

Supposons que j'ai une classe avec une propriété privée et un getteur public associé et un setter associé. Je souhaite tester avec PHPUnit que la propriété obtient la valeur correcte après l'utilisation du secteur ou que le Getter renvoie la propriété correcte.

Bien sûr, je peux tester le secteur en utilisant le Getter pour voir que l'objet stockait la bonne valeur, et vice versa pour tester le Getter. Cependant, cela ne garantit pas que la propriété privée est celle définie.

Dites que j'avais la classe suivante. J'ai créé une propriété, Getter et Setter. Mais j'ai fait une faute de frappe dans le nom de la propriété, donc le Getter et le Setter ne manipulent pas réellement la propriété qu'ils sont censés manipuler

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 j'exécute le test suivant

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

J'obtiendrais un laissez-passer. Cependant, quelque chose de très mauvais s'est réellement produit que je ne veux pas. Lorsque setName () est appelé, il crée en fait une nouvelle propriété dans la classe avec le nom que je pensais que ma propriété privée avait, seul celui que le secteur crée est public! Je peux le démontrer avec le code suivant:

$a  = new SomeClass;

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

Il sortirait:

String (6) "Gerald"

String (6) "Gerald"

Y a-t-il un moyen d'accéder aux propriétés privées depuis PHPUnit afin que je puisse écrire des tests qui m'assurent que les propriétés que je pense être et définies sont vraiment en train de devenir et de définir?

Ou y a-t-il une autre chose que je devrais faire dans un test pour attraper des problèmes comme celui-ci sans essayer d'accéder à l'état privé de l'objet testé?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top