Zend framework2 如何使用ZfcuseIdentity助手在Zend Framework 2和ZfcUser上测试操作

Zend framework2 如何使用ZfcuseIdentity助手在Zend Framework 2和ZfcUser上测试操作,zend-framework2,phpunit,zfcuser,bjyauthorize,Zend Framework2,Phpunit,Zfcuser,Bjyauthorize,按照这种方式,我正在使用ZfcUser并尝试在控制器中测试一些操作。但是当执行测试时,我会得到一个错误,因为我正在使用$this->zfcUserIdentity()获取视图中的用户名 我怎样做这个测试?我想模仿这种方法,但我不知道如何做到这一点。您可以看看ZfcUser测试: 基本上,您必须模拟ZfcuseIdentity控制器插件,并告诉控制器插件管理器使用该模拟。我在我的AbstractHttpControllerTestCase中使用了类似的内容: /** * @param array

按照这种方式,我正在使用ZfcUser并尝试在控制器中测试一些操作。但是当执行测试时,我会得到一个错误,因为我正在使用
$this->zfcUserIdentity()
获取视图中的用户名


我怎样做这个测试?我想模仿这种方法,但我不知道如何做到这一点。

您可以看看ZfcUser测试:


基本上,您必须模拟ZfcuseIdentity控制器插件,并告诉控制器插件管理器使用该模拟。

我在我的
AbstractHttpControllerTestCase中使用了类似的内容:

/**
 * @param array $roles  e.g. ['admin']
 */
protected function login($roles) {
    $userMock = $this->getMock('Application\Entity\User', [], [], '', false);
    $userMock->expects($this->any())
    ->method('getRoles')->will($this->returnValue($roles));

    $storageMock = $this->getMock('\Zend\Authentication\Storage\NonPersistent');
    $storageMock->expects($this->any())
    ->method('isEmpty')->will($this->returnValue(false));
    $storageMock->expects($this->any())
    ->method('read')->will($this->returnValue($userMock));

    $sm = $this->getApplicationServiceLocator();
    $auth = $sm->get('Zend\Authentication\AuthenticationService');
    $auth->setStorage($storageMock);
}
然后在我的测试中:

$this->login(['admin']);
$this->dispatch($url);

感谢@Danielss89,我无法完全理解如何模拟ZfcuseIdentity控制器插件,但我查看了代码,使其模拟AuthenticationService,并期望使用getIdentity方法模拟用户实体。工作完美。我正在使用ZfcRbac(权限);如果你不是,你就不需要这个
getRoles
,你应该更专注于充实
$userMock