Unit testing 如何在ZF2单元测试中模拟可调用的?

Unit testing 如何在ZF2单元测试中模拟可调用的?,unit-testing,zend-framework2,phpunit,Unit Testing,Zend Framework2,Phpunit,我试图在一个控制器上运行一个单元测试,该控制器有一个使用视图帮助器的视图。My invokable在My helper配置中设置为: <?php return [ 'invokables' => [ 'viewHelper' => 'Theme\View\Helper\ViewHelper', ], ]; 这是徒劳的,因为它现在位于控制器服务管理器中,而一个对等的服务管理器似乎与视图一起生成。不幸的是,视图在退出之前创建了一个新的服务实例,并查

我试图在一个控制器上运行一个单元测试,该控制器有一个使用视图帮助器的视图。My invokable在My helper配置中设置为:

<?php
return [
    'invokables' => [
        'viewHelper' => 'Theme\View\Helper\ViewHelper',
    ],
];
这是徒劳的,因为它现在位于控制器服务管理器中,而一个对等的服务管理器似乎与视图一起生成。不幸的是,视图在退出之前创建了一个新的服务实例,并查看其对等实例


因此,关于如何有效地模拟这个问题,有什么想法吗?

在发送请求之前,请确保模拟助手:

public function testMethod()
{
    /**
      * mock of your invokable class
      */
    $mock = ...;

    $sm = $this->getApplicationServiceLocator();
    $sm->setAllowOverride(true);
    $sm->setService('viewHelper', $mock);
    $sm->setAllowOverride(false);

    // your invokable is now mocked
}

您可以模拟服务管理器以返回模拟服务,并在对象上调用setServiceManager$your_mock_service_manager?
$mockHelper = $this->getMock('Theme\View\Helper\ViewHelper');
$this->serviceManager->setService('viewHelper', $mockHelper);
public function testMethod()
{
    /**
      * mock of your invokable class
      */
    $mock = ...;

    $sm = $this->getApplicationServiceLocator();
    $sm->setAllowOverride(true);
    $sm->setService('viewHelper', $mock);
    $sm->setAllowOverride(false);

    // your invokable is now mocked
}