使phpunit捕获php7 TypeError

使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

我试图验证php7函数是否只接受整数

这是一节课:

<?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
s
assert()
),至少可以说这是违反直觉的。您能解释一下(可能通过文档引用)如何解决这个问题吗?
$this->expectError(TypeError::class);