我正在学习单元测试,并试图解决以下问题:
Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for zfcUserAuthentication
...使用在以下给出的唯一答案:
所以我的 setUp 函数看起来是一样的。不幸的是,我收到错误消息:
Zend\Mvc\Exception\InvalidPluginException: Plugin of type Mock_ZfcUserAuthentication_868bf824 is invalid; must implement Zend\Mvc\Controller\Plugin\PluginInterface
这是在这部分代码引起的(在我的代码中以相同的方式拆分):
$this -> controller->getPluginManager()
->setService('zfcUserAuthentication', $authMock); // Error refers to this line.
$authMock 对象显然没有实现插件接口,我需要实现它才能传递给 setService。
$authMock 不打算在单元测试中使用吗?我应该使用不同的(面向单元测试的)setService 方法吗?
我需要一种方法来处理登录到我的应用程序,否则我的单元测试毫无意义。
感谢您的任何建议。
=== 编辑 (11/02/2013) ===
我想把重点放在这部分进行澄清,因为我认为这是问题区域:
// Getting mock of authentication object, which is used as a plugin.
$authMock = $this->getMock('ZfcUser\Controller\Plugin\ZfcUserAuthentication');
// Some expectations of the authentication service.
$authMock -> expects($this->any())
-> method('hasIdentity')
-> will($this->returnValue(true));
$authMock -> expects($this->any())
-> method('getIdentity')
-> will($this->returnValue($ZfcUserMock));
// At this point, PluginManager disallows mock being assigned as plugin because
// it will not implement plugin interface, as mentioned.
$this -> controller->getPluginManager()
->setService('zfcUserAuthentication', $authMock);
如果模拟没有处理必要的实现,我还能假装登录吗?