我试图创建一个模拟对象,并用我的Zend Framework的应用程序中,当测试:PHPUnit的测试双抛出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);
}
...但它抛出一个异常PHPUnit_Framework_MockObject_BadMethodCallException,但没有真正别的不多(例如,为什么)。如果我在我的应用程序中执行echo get_class($auth); exit;
,我可以看到它是Mock_QA_Auth_f4627b7b
类,所以至少它正在拾取模拟实例。但是当我调用isAuthenticated方法时,它会抛出异常。我究竟做错了什么?
以下是错误消息我看到:
$ ./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
请发布您收到的错误...也许isAuthenticated以外的方法正在调用,但不存在。尝试确保真正的QA_class在创建模拟前已加载或可自动加载 – gontrollez 2015-02-11 15:39:04
我用运行测试时收到的错误消息更新了我的问题。我也试着简单地从测试中创建一个'$ auth = new QA_Auth()'实例,并且可以确认该类正在被加载,所以肯定是可见的。 – Martyn 2015-02-12 04:27:01
好吧,有点奇怪,但我一直在改变一些其他文件,现在这对我来说很有用。也许这与我的测试脚本不是一个错误。不知道是什么问题,因为它似乎没有多少好处。无论如何,感谢您的帮助,如果我找出问题所在,我会回复。我很想知道我自己。 – Martyn 2015-02-12 09:32:45