Я изучал модульное тестирование, и я попытался решить следующую проблему:
Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for zfcUserAuthentication
... используя единственный ответ, указанный в:
Простые тесты ZF2 для контроллера с использованием ZfcUser
Итак, моя функция 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, по-видимому, не реализует plugininterface, который мне нужно реализовать, чтобы перейти в 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);
Если макет не обрабатывает необходимые реализации, как еще мне притворяться, чтобы войти в систему?