使phpunit捕获php7 TypeError
我试图验证php7函数是否只接受整数 这是一节课:使phpunit捕获php7 TypeError,phpunit,php-7,Phpunit,Php 7,我试图验证php7函数是否只接受整数 这是一节课: <?php declare(strict_types=1); class Post { private $id; public function setId(int $id) { $this->id = $id; } } 是的,您可以使用相同的方法测试类型错误 但是,我不会测试PHP是否在类型不匹配的情况下发出类型错误。这种测试对于PHP7代码来说是多余的。遗憾的是,TypeE
<?php
declare(strict_types=1);
class Post
{
private $id;
public function setId(int $id)
{
$this->id = $id;
}
}
是的,您可以使用相同的方法测试类型错误
但是,我不会测试PHP是否在类型不匹配的情况下发出类型错误。这种测试对于PHP7代码来说是多余的。遗憾的是,TypeError
不是Exception
()的子类,而它扩展了Error
。他们唯一真正共享的是Throwable
界面。ThrowMatcher实际上无法捕获类型错误
如果您查看中的代码
,
您可以看到PHPSpec捕获继承“Exception
”的异常
然后检查该异常的实例类型
另请参见。尝试以下操作:
$this->expectException(TypeError::class);
对于较新的PHP版本,请尝试:
$this->expectError(TypeError::class);
有什么有用的参考资料吗?doc等?这并不能解决任何问题,因为如上所述,TypeError不是Exception的子类。@灾难Jane至少在Php7.2中是这样。2017年,我使用Php7.0,很高兴它在Php7.2中得到了解决<代码>$this->expectException(TypeError::class)
在PHP7.0.33、7.1.33、7.2.30、7.3.17和7.4.5中工作。这是经验证的回购协议:谢谢。但不幸的是@pawel ploczek的$this->expectError(TypeError::class)
甚至没有更新最新的PHP(7.4.5)。您能详细介绍一下测试类型不匹配的超级方面吗?例如,为什么检查我没有忘记在myMethod()
的第一个参数中添加类型提示是没有用的?情况似乎并非如此。从您自己的文档中:默认情况下,PHPUnit将在执行测试期间触发的PHP错误、警告和通知转换为异常。
似乎您需要@expectedException PHPUnit\Framework\Error
才能预期任何PHP错误(包括通过PHP7发出的Error
sassert()
),至少可以说这是违反直觉的。您能解释一下(可能通过文档引用)如何解决这个问题吗?
$this->expectError(TypeError::class);