phpunit获取异常消息

时间:2016-01-15 15:23:16

标签: php cakephp exception-handling phpunit cakephp-3.0

我刚开始使用php单元。 在我的测试用例中,UsersController应该返回:

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

phpunit代码

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

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

  

应用\测试\测试用例\控制器\的UsersControllerTest :: testActivate   声明类型" Cake \ Network \ Exception \ NotFoundException"的异常失败扔了。

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

  

应用\测试\测试用例\控制器\的UsersControllerTest :: testActivate   异常' Cake \ Network \ Exception \ NotFoundException'有消息'未找到'在/vagrant/ifmx.local/src/Controller/UsersController.php:215

有人知道它为什么会发生吗?是否有任何方法可以在单元测试中获取异常消息。

1 个答案:

答案 0 :(得分:0)

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

它不会只是调用控制器方法,如$controller->action(),它会模拟整个请求,因此会捕获异常,导致错误页面被渲染,就像当您在浏览器中访问URL时会发生这种情况。

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

可能的异常被缓存在IntegrationTestCase::$_exception属性中,您可以使用它来测试是否抛出了什么类型的异常,等等,

$this->assertInstanceOf('\Cake\Network\Exception\NotFoundException', $this->_exception);
$this->assertEquals('Not Found', $this->_exception->getMessage());