PHPUnit Il miglior approccio per deridere gli oggetti contenitore? (ad esempio $ item-id)

1

Sto usando il test PHPUnit per duplicare modelli, librerie, ecc. Ma quando voglio restituire un array, forse, di oggetti contenitore, il modo migliore per farlo. Ecco cosa sto facendo attualmente:

/**
* This is just a mock of the response from http client
*/
class Container {
    public $values;

    public function __construct($values) {
        $this->values = $values;
    }

    public function __get($name) {
        return (isset($values[$name])) ? $values[$name] : null;
    }

    public function __set($name, $value) {
        $values[$name] = $value;
    }
}

.. quindi nei miei metodi di prova * posso fare qualcosa del tipo:

$userMock = new Container(array('id' => 2, 'name'=>'Tom'));
$this->mock
    ->method('find') // called within BaseController
    ->with(2)
    ->willReturn( $userMock );

Quindi non so se posso usare PHPUnit tets double o Mockery per creare tali classi, posso? Sembra più semplice fare solo così, è comunque un buon approccio?

    
posta Martyn 28.02.2015 - 07:29
fonte

1 risposta

2

In generale, non è necessario simulare oggetti valore (e gli oggetti contenitore sembrano oggetti valore) e il tuo approccio è giusto.

Se hai bisogno di scrivere asserzioni sulle proprietà, considererei un odore di codice. Comunque, l'unità PHP ti permette di prendere in giro i metodi magici, così puoi ad esempio far valere le chiamate __set, oppure puoi semplicemente asserire il valore finale della proprietà (supponendo tu abbia bisogno di affermare che le proprietà sono correttamente impostate, se hai bisogno di affermare che sono letti, questo è un odore di prova, come si dovrebbe verificare il risultato finale del codice che li usa, e non la sua esatta implementazione, ad esempio non verificare da dove ha preso valore, ma verificare cosa ha fatto con quel valore)

    
risposta data 02.03.2015 - 18:18
fonte

Leggi altre domande sui tag