Domanda

Supponiamo di avere una lezione con una proprietà privata e una getter pubblica e un setter associato. Voglio testare con PhPUNIT che la proprietà ottiene il valore corretto dopo l'uso del setter o che il getter restituisca la proprietà corretta.

Naturalmente posso testare il setter usando il getter per vedere che l'oggetto sta memorizzando il valore corretto e viceversa per testare il getter. Tuttavia, ciò non garantisce che la proprietà privata sia quella che è impostata.

Supponiamo che avessi la lezione seguente. Ho creato una proprietà, getter e setter. Ma ho fatto un errore di battitura nel nome della proprietà, quindi il getter e il setter non manipolano la proprietà sono destinati a manipolare

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);
    }
}

Se eseguo il seguente test

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

Vorrei ottenere un passaggio. Tuttavia, è successo qualcosa di molto brutto che non voglio. Quando viene chiamato setName (), in realtà crea una nuova proprietà nella classe con il nome che pensavo avesse la mia proprietà privata, solo quella che il setter crea è pubblico! Posso dimostrarlo con il seguente codice:

$a  = new SomeClass;

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

Output:

String (6) "Gerald"

String (6) "Gerald"

Esiste un modo per accedere alle proprietà private da PhPUNIT in modo da poter scrivere test che si assicurano che le proprietà che penso siano ottenute e imposti in realtà vengono davvero imposti?

O c'è qualche altra cosa che dovrei fare in un test per recuperare problemi come questo senza cercare di accedere allo stato privato dell'oggetto in esame?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top