Unit testing 如何使用数据库访问测试视图帮助程序

Unit testing 如何使用数据库访问测试视图帮助程序,unit-testing,zend-framework,zend-framework2,view-helpers,Unit Testing,Zend Framework,Zend Framework2,View Helpers,我有一些视图助手(crossmodule),它们需要访问数据库。这方面的一个常见示例是NotificationHelper,它跨多个页面打印用户通知: <div class="notifications"> <?php echo $this->notifications()->render(); ?> </div> 虽然这非常方便,但使用AbstractHttpControllerTestCase在控制器上进行烟幕测试/单元测试似乎非常困难,

我有一些视图助手(crossmodule),它们需要访问数据库。这方面的一个常见示例是
NotificationHelper
,它跨多个页面打印用户通知:

<div class="notifications">
<?php echo $this->notifications()->render(); ?>
</div>

虽然这非常方便,但使用
AbstractHttpControllerTestCase
在控制器上进行烟幕测试/单元测试似乎非常困难,因为助手总是希望访问数据库(显然他不应该,是吗?)。因此,为了防止出现这种情况,我需要模拟
NotificationHelper
。但这还不够,因为模拟将返回
$this->notifications()
null
,因此
render()
将失败

我能想到的唯一方法是:

  • 模拟
    NotificationHelper
  • 定义
    NotificationHelper
    的返回值,例如(在本例中)
    \uu invoke()
  • 分离RenderListener,但这会导致视图无法以任何方式进行测试(如果所有
    仍能工作,有时可以查看视图)
前两种方法似乎非常臃肿,而且有点错误,因为我需要在每个ControllerTest中对每个助手都这样做

第三种方法带来了一些舒适感,因为视图模板不再需要测试


有没有更好的方法?或者整个过程都错了?或者我的想法完全错了吗?

AbstractHttpControllerTestCase可以用于功能测试,但不应该用于真正的单元测试