我试图验证php7函数只接受整数.
这是班级:
id = $id; } }
这是测试:
getPostEntity()->setId($input); } } }
我得到的错误是:
TypeError: Argument 1 passed to Post::setId() must be of the type integer, string given, called in /path/test/PostTest.php on line 35
有可能验证这样的错误吗?还有,运行这样的支票是否有意义?
是的,您可以TypeError
使用与其他任何异常相同的方式进行测试.
但是,我不会测试PHP在类型不匹配的情况下发出类型错误.这是一种使用PHP 7代码变得多余的测试.
可悲的是,TypeError
它不是Exception
(参考)的子类,而是它的延伸Error
.他们唯一真正分享的是Throwable
界面.ThrowMatcher实际上无法捕获TypeError.
如果查看代码
src/PhpSpec/Matcher/ThrowMatcher.php
,可以看到PHPSpec捕获继承'Exception
'的异常,然后检查该异常的实例类型.
另见这个答案.