【发布时间】:2012-03-12 02:45:29
【问题描述】:
我使用 ZF 1.11 设置了学说 2,我很难学习单元测试控制器的最佳方法。我希望能够在控制器中测试操作,而无需在单元测试中写入数据库,但是我发现实际上不可能这样做。
例如,假设我的控制器中有以下假设操作。
public function redirectUserAction() {
$registry = Zend_Registry::getInstance();
$em = $registry->entitymanager;
$user = $em->getRepository('Application_Model_User')
->findOneBy(array('email' => 'test@test.com'));
if(is_object($user)) {
$this->_redirect('/');
}
}
我想测试一下,如果有电子邮件地址 test@test.com 的用户可用,它将重定向到 / 所以目前我有以下测试。
public function testUserAvaliableShouldRedirectIndex() {
$registry = Zend_Registry::getInstance();
$em = $registry->entitymanager;
$user = new Application_Model_User();
$user->setEmail('test@test.com');
$em->persist($user);
$em->flush();
$this->dispatch('/index/redirect-user');
$this->assertRedirectTo('/');
$em->remove($user);
$em->flush();
}
在我看来,这是一种非常混乱的测试编写方式。我的印象是,使用原则,我不需要实际刷新到数据库,因为我的对象将存储在持久层中,但目前我的测试在没有刷新的情况下失败。
如果有人知道我可以编写测试的更好方法,或者可以帮助我看看哪里出错了,我将非常感激。
谢谢
【问题讨论】:
标签: zend-framework doctrine controller phpunit