Sto tentando di testare una classe di interfaccia del servizio Web utilizzando PHPUnit. Fondamentalmente, questa classe effettua chiamate a un oggetto SoapClient. Sto tentando di testare questa classe in PHPUnit utilizzando il metodo getMockFromWsdl
descritto qui:Come testare un servizio Web in PHPUnit attraverso più test?
Tuttavia, dal momento che voglio provare più metodi di questa stessa classe, ogni volta che l'installazione l'oggetto, devo anche imposta il simulatore WSDL SoapClient oggetto. Questo sta causando un errore fatale per essere gettato:
Fatal error: Cannot redeclare class xxxx in C:\web\php5\PEAR\PHPUnit\Framework\TestCase.php(1227) : eval()'d code on line 15
Come posso usare lo stesso oggetto fittizio attraverso più test senza dover rigenerare fuori dal WSDL ogni volta? Questo sembra essere il problema.
-
Essendo stato chiesto di inserire un codice a guardare, ecco il metodo di impostazione nella TestCase:
protected function setUp() {
parent::setUp();
$this->client = new Client();
$this->SoapClient = $this->getMockFromWsdl(
'service.wsdl'
);
$this->client->setClient($this->SoapClient);
}
ho postato un certo codice in questione per la revisione. Mettersi in un class_exist non sembra che risolva il problema, dato che devi comunque recuperare l'oggetto mock in qualche modo e questa classe eseguirà sempre quella valutazione. A meno che non dovessi modificare PHPUnit stesso? Cosa avevi in mente in dove collocare il metodo class_exists()? – scraton
N. Stop. PHPUnit * non * necessita di modifiche. Sul serio. Perché stai usando eval? La classe che esegue eval è il problema. Il controllo 'class_exists' è solo un suggerimento per impedire la ri-dichiarazione di una classe preesistente. Questo controllo deve essere inserito all'interno della classe che esegue "eval". – pestilence669
PHPUnit chiama il codice eval, non il mio codice. Penso che abbia qualcosa a che fare con l'analisi del WSDL e la creazione di oggetti mock su quella definizione. – scraton