当前位置:  开发笔记 > 编程语言 > 正文

PHP7中的PHPSpec捕获TypeError

如何解决《PHP7中的PHPSpec捕获TypeError》经验,为你挑选了2个好方法。

我想在PHP7中测试标量类型提示和严格类型的示例方法.当我没有传递参数时,该方法应该抛出一个TypeError.PHPSpec返回致命错误:

未捕获的TypeError:参数1传递给Example :: test

name = $name;
    }
}


class ExampleSpec extends ObjectBehavior
{
    function it_is_initializable()
    {
        $this->shouldHaveType('Test\Example');
    }

    function it_check_test_method_when_not_pass_argument()
    {
        $this->shouldThrow('\TypeError')->during('test');
    }
}

一开始我宣布: declare(strict_types=1);

怎么了?我如何测试投掷TypeError



1> Will..:

经过进一步调查,这是一个PHPSpec错误,已在此处报告.该漏洞在几个月内尚未修复,因此我建议对其进行评论.

如果查看代码src/PhpSpec/Matcher/ThrowMatcher.php,可以看到PHPSpec捕获继承' Exception'的异常,然后检查该异常的实例类型.但是,TypeError不继承Exception,它继承自Error.它与a的共同点Exception是它们都实现了Throwable接口.

例如:

101     public function verifyPositive($callable, array $arguments, $exception = null)
102     {
103         try {
104             call_user_func_array($callable, $arguments);
105         } catch (\Exception $e) {
106             if (null === $exception) {
107                 return;
108             }
109
110             if (!$e instanceof $exception) {
111                 throw new FailureException(sprintf(
112                     'Expected exception of class %s, but got %s.',
113                     $this->presenter->presentValue($exception),
114                     $this->presenter->presentValue($e)
115                 ));
116             }

报告错误,解释这些细节,并向他们展示有关继承的文档TypeError.



2> Calamity Jan..:

对我来说,如果我用以下注释单元测试,它就可以工作:

/**
 * @expectedException \TypeError
 */

然后我的测试是绿色的。

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有