【问题标题】:phpunit get exception messagephpunit 获取异常信息
【发布时间】:2016-04-21 05:46:07
【问题描述】:

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

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 在 /vagrant/ifmx.local/src/Controller/UsersController.php:215 中带有消息“未找到”的异常“Cake\Network\Exception\NotFoundException”

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

【问题讨论】:

  • return throw?那是一个解析器错误...

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 是的,你是对的。我试图不正确地使用 TestCases。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 2013-03-31
相关资源
最近更新 更多