zend-framework – 如何对zend动作控制器进行单元测试?

我需要在php中快速构建好的软件并使用zend框架.我尝试以TDD的方式进行此操作,因为比我更有经验的人告诉我,这是快速构建同时保持代码可管理性的最佳方式.

所以我得到了关于phpunit的书并顺利进行,确实在最初的麻烦后它开始加速并且代码仍然很好.我很喜欢我的物品可以单独测试.

然而,测试zend动作控制器存在一个主要问题. zend_test包提供了一种测试方法.但这似乎立刻测试了整个应用程序.我似乎无法很好地存根或模拟任何存储库或注入任何其他依赖项.因此,我无法像对待项目的其余部分那样对它们进行广泛的测试.

我一直在寻找解决这个问题.但我能在网上找到的只有zend_test的方式.

我想知道你对此的看法.也许我只是想做一些事情,或者有一种更好的方法来开发zend动作控制器的单元测试.

最佳答案 在Zend 1中,控制器是普通类.您可以实例化它,您可以在其上调用方法(例如,使用存储库的
PHPUnit模拟替换您的默认存储库:

class MyController extends Zend_Controller_Action
{
   public functioni init()
   {
      $this->repository = new MyRepository();
   }

   public function setRepository($repository)
   {
      $this->repository = $repository;
   }

   public function saveAction()
   {
      $dataToWrite = manipulate in some way $this->getRequest()->getParams();
      $this->repository->update($dataToWrite, ...);
   }
}

但是你还必须注入一个请求,并发送它以获得响应.

对于控制器而言,我更喜欢编写功能测试而不是单元测试(使用Zend_Test).它速度较慢,您可能需要一个内存中的sqlite数据库,依此类推.但是你会知道你的应用程序是否真的有效:你可以对每个类进行单元测试,但是如果连接你的对象的工厂是错误的,那么你将继续得到一个带有应用程序损坏的绿色PHPUnit栏.

点赞