phpunit 获取异常消息


phpunit get exception message

我刚刚开始使用php单元。在我的测试用例中,用户控制器应返回:

public function UsersController() {
    ....
    throw new 'Cake'Network'Exception'NotFoundException();
}

PHPunit代码

$this->setExpectedException('Cake'Network'Exception'NotFoundException');

返回如下所示的断言失败:

App''Test''TestCase''Controller''UsersControllerTest::testActivate 断言引发类型为"Cake''Network''Exception''NotFoundException"的异常失败。

同时,浏览器返回 404 PageNotFound 和 $this->assertResponseOk() 返回:

App''Test''TestCase''Controller''UsersControllerTest::testActivate 异常"Cake''Network''Exception''NotFoundException",在/vagrant/ifmx.local/src/Controller/UsersController.php:215 中显示消息"未找到"

有人知道为什么会这样吗?并且有没有办法在单元测试中获取异常消息。

您似乎误解了集成测试用例的工作原理。

它不只是包装对控制器方法的调用,如$controller->action(),它模拟整个请求,因此,异常被捕获,并导致错误页面被呈现,就像你在浏览器中访问 URL 时发生的那样。

因此,

PHPUnit 永远不会知道异常,因此您不能像直接测试异常冒泡到 PHPUnit 的特定代码部分那样使用预期的异常功能。如果发生这种情况,那么即使抛出异常,也不可能断言人们可能想要做的响应。

可能的异常正在IntegrationTestCase::$_exception属性中缓冲,例如,您可以使用该属性来测试是否抛出了哪种异常等,例如

$this->assertInstanceOf(''Cake'Network'Exception'NotFoundException', $this->_exception);
$this->assertEquals('Not Found', $this->_exception->getMessage());
相关文章: