使用PHPUnit和Zend Framework进行问题测试异常

6

当用户访问/user/validate时,如果没有正确的post参数,我的Zend应用程序会抛出一个zend异常。(我得到了标准的“发生错误”消息,框架在我的布局内)。这是有意为之。

现在我正在尝试使用PHPUnit测试该行为。以下是我的测试:

/**
 * @expectedException Zend_Exception
 */
public function testEmptyUserValidationParametersCauseException() {
    $this->dispatch('/user/validate');
}

当我运行测试时,出现了失败的提示信息:“期望异常Zend_Exception”。你有什么想法吗?
我在文件中还有其他测试,它们都正常运行...
谢谢!
2个回答

5

Zend_Controller_Plugin_ErrorHandler插件可为您处理异常,而默认的Error_Controller会强制进行500重定向,这可能意味着您正在测试的异常已不再存在。请尝试以下单元测试并查看是否通过:

public function testUnknownUserRedirectsToErrorPage()
{
    $this->dispatch('/user/validate');
    $this->assertController('error');
    $this->assertAction('error');
    $this->assertResponseCode('500');
}

如果这样做有效,那么它表明在渲染错误视图时,异常已经不存在了,因为它被重定向之前的代码所包含。

谢谢tomjowitt!你一次就搞定了! - DatsunBing
有没有一种类似于Symfony的sfBrowser->getCurrentException()的方法来检索未捕获的异常? 这可能也很有用,以验证是否抛出了正确的异常。 - user212218

2
也许它之所以失败是因为没有抛出异常?您尝试过不使用"@expectedException Zend_Exception"运行测试吗?是否有任何异常?

+1 对于诊断缺失但预期异常的建议。很可能在删除注释后,您会看到测试通过。关于错误控制器的另一个答案可能是正确的。 - David Harkness

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接