Sto cercando di creare un oggetto fittizio e l'uso che all'interno della mia applicazione Zend Framework quando il test:prova PHPUnit getta doppia PHPUnit_Framework_MockObject_BadMethodCallException
public function testAskQuestionRouteWithLoggedIn()
{
// get the mock auth object, and update the registry
$auth = $this->getMockBuilder('QA_Auth')
->disableOriginalConstructor()
->getMock();
// mock methods, and return values
$auth->method('isAuthenticated')
->will($this->returnValue(true));
// update the registry
$auth = Zend_Registry::set('Auth', $auth);
// now preform the test as a logged in user
$this->dispatch('/ask');
$this->assertController('questions');
$this->assertAction('new');
// // // check the page contains a question form
$this->assertQueryCount('form#questionForm', 1);
}
... ma è gettando un'eccezione PHPUnit_Framework_MockObject_BadMethodCallException, ma in realtà non molto altro (es. motivo per cui). Se faccio un echo get_class($auth); exit;
dalla mia applicazione posso vedere che è della classe Mock_QA_Auth_f4627b7b
, quindi almeno sta raccogliendo l'istanza di simulazione. Ma quando chiamo il metodo isAuthenticated, lancia quell'eccezione. Che cosa sto facendo di sbagliato?
Ecco il messaggio di errore che sto vedendo:
$ ./vendor/bin/phpunit tests/application/controllers/QuestionsControllerTest.php
PHPUnit 4.4.2 by Sebastian Bergmann.
Configuration read from /var/www/vhosts/qasystem/qasystem/tests/application/phpunit.xml
E
Time: 277 ms, Memory: 7.50Mb
There was 1 error:
1) QuestonsControllerTest::testAskQuestionRouteWithLoggedIn
PHPUnit_Framework_MockObject_BadMethodCallException:
/var/www/vhosts/qasystem/qasystem/application/controllers/BaseController.php:331
/var/www/vhosts/qasystem/qasystem/application/controllers/BaseController.php:29
/var/www/vhosts/qasystem/qasystem/application/controllers/QuestionsController.php:14
/var/www/vhosts/qasystem/qasystem/vendor/zendframework/zendframework1/library/Zend/Controller/Action.php:133
/var/www/vhosts/qasystem/qasystem/vendor/zendframework/zendframework1/library/Zend/Controller/Dispatcher/Standard.php:281
/var/www/vhosts/qasystem/qasystem/vendor/zendframework/zendframework1/library/Zend/Controller/Front.php:954
/var/www/vhosts/qasystem/qasystem/vendor/zendframework/zendframework1/library/Zend/Application/Bootstrap/Bootstrap.php:105
/var/www/vhosts/qasystem/qasystem/vendor/zendframework/zendframework1/library/Zend/Application.php:382
/var/www/vhosts/qasystem/qasystem/tests/application/controllers/BaseControllerTestCase.php:67
/var/www/vhosts/qasystem/qasystem/tests/application/controllers/QuestionsControllerTest.php:26
Si prega di inviare l'errore che stai ottenendo ... Forse un metodo diverso da isAuthenticated viene chiamato, ma non esiste. Prova ad assicurarti che la vera QA_class sia caricata o ricaricabile automaticamente prima di crearla. – gontrollez
Ho aggiornato la mia domanda con il messaggio di errore che ricevo durante l'esecuzione del test. Ho anche provato semplicemente a creare una istanza '$ auth = new QA_Auth()' dal test e posso confermare che la classe è stata caricata, quindi è certamente visibile. – Martyn
Ok, un po 'strano ma stavo apportando modifiche ad altri file e ora questo funziona per me. Forse non era un errore con i miei script di test. Non sono sicuro di quale fosse il problema in quanto non sembrava dare molto. Grazie comunque per il tuo aiuto, se capisco qual è il problema, lo posterò. Mi piacerebbe conoscermi da solo. – Martyn