Ho cercato ma non riesco a trovare quello che sto cercando e il manuale non è di grande aiuto in questo senso. Sono abbastanza nuovo ai test unitari, quindi non sono sicuro di essere sulla buona strada. Comunque, sulla domanda. Ho una classe:Creazione di oggetti fittizi nell'unità PHP
<?php
class testClass {
public function doSomething($array_of_stuff) {
return AnotherClass::returnRandomElement($array_of_stuff);
}
}
?>
Ora, chiaramente voglio il AnotherClass::returnRandomElement($array_of_stuff);
di restituire la stessa cosa ogni volta. La mia domanda è, nel mio test unitario, come posso simulare questo oggetto?
Ho provato ad aggiungere AnotherClass
all'inizio del file di test, ma quando voglio testare AnotherClass
viene visualizzato l'errore "Can not redeclare class".
Penso di capire le classi di fabbrica, ma non sono sicuro di come applicherò questo in questo caso. Avrei bisogno di scrivere una classe AnotherClass completamente separata che contenesse i dati di test e quindi utilizzare la classe Factory per caricare quello invece del vero AnotherClass? O sta usando il modello di fabbrica solo una falsa pista.
ho provato questo:
$RedirectUtils_stub = $this->getMockForAbstractClass('RedirectUtils');
$o1 = new stdClass();
$o1->id = 2;
$o1->test_id = 2;
$o1->weight = 60;
$o1->data = "http://www.google.com/?ffdfd=fdfdfdfd?route=1";
$RedirectUtils_stub->expects($this->any())
->method('chooseRandomRoot')
->will($this->returnValue($o1));
$RedirectUtils_stub->expects($this->any())
->method('decodeQueryString')
->will($this->returnValue(array()));
nella funzione setup(), ma questi stub vengono ignorati e non riesco a capire se si tratta di qualcosa che sto facendo male, o il modo in cui sto accedendo i metodi AnotherClass
.
Help! Questo mi sta facendo impazzire.
Brillante, grazie per la risposta. Una domanda però; quindi, ho una mia classe Factory, che crea tutte le istanze per me. Questa è la classe che va in produzione. Aggiungo il materiale degli oggetti simulati in questa classe, o semplicemente lascio la classe di produzione principale come produzione, quindi aggiungo una nuova classe di fabbrica per le unittests? – Mike
Questo è tutto per te. È possibile creare una nuova classe factory per i test, oppure assicurarsi di aver ripulito la classe Factory dopo averla testata. –