我需要在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栏.