加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何使用phpspec测试异常处理程序

发布时间:2020-12-13 22:54:45 所属栏目:PHP教程 来源:网络整理
导读:我找到一种方法来测试我的异常处理程序在抛出异常时被调用,我有点磕磕绊绊. 这是我最初合作进行测试的想法: class ClientSpec extends ObjectBehavior{ function it_should_catch_exceptions(Config $config) { $e = new Exception('test exception'); $thi
我找到一种方法来测试我的异常处理程序在抛出异常时被调用,我有点磕磕绊绊.

这是我最初合作进行测试的想法:

class ClientSpec extends ObjectBehavior
{
    function it_should_catch_exceptions(Config $config)
    {
        $e = new Exception('test exception');
        $this->catchException($e)->shouldBeCalled();
        throw $e;
    }
}

客户端有一个方法catchException,它将通过set_exception_handler:http://php.net/set_exception_handler设置为异常处理程序.

运行此测试给了我这样的反馈:没有beCalled([array:0])找到null的匹配器,所以我也尝试为Exception创建一个规范并执行以下操作:

class ExceptionSpec extends ObjectBehavior
{
    function it_should_trigger_opbeat_client_when_thrown(Client $client)
    {
        $client->catchException($this)->shouldBeCalled();
        throw $this->getWrappedObject();
    }
}

但运行此测试会返回另一个错误:异常[exc:Exception(“”)]已被抛出

如何测试我的异常处理程序是否被调用?

解决方法

我担心您无法使用phpspec,PHPUnit或其他类似的测试工具测试异常处理程序,因为它们将您编写的测试包装到try-catch块中以捕获任何未捕获的异常并报告它.

另一方面,set_expection_handler()的文档说:

Sets the default exception handler if an exception is not caught within a try/catch block.

由于phpspec捕获了测试代码抛出的所有异常,因此您安装的异常处理程序没有机会运行:-(

我认为所有未被捕获的例外都会在ExampleRunner.php at line 96结束他们的冒险

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读