首页 > 解决方案 > PHP7.4中如何让PHPUnit测试属性初始化?

问题描述

当采用 PHP7.4 类型属性时,我们的应用程序中的代码样式更改之一是从:

if (null === $object->value) { ... }

if (empty($object->value)) { ... }

即使类型属性可以为空,第一个 if 语句也会抛出Error.

下一步是编写测试。在使用empty()检查类型化属性是否已初始化的情况下,PHPUnit 实现在assertEmpty崩溃时出现相同的错误。

显然assertFalse(isset($obj->value)可以,但是应该使用什么断言来检查属性是否未实例化?简化我们想要的测试:

function testInstantiatedAfterCall()
{
    $obj = new Object('http://example.com');
    $obj->changeContainer('Example Container');

    $this->assertNull($obj->value);
    // or
    $this->assertEmpty($obj->value);
}

标签: phpphpunitphp-7.4

解决方案


似乎没有内置的断言。您必须自己编写,使用ReflectionProperty::isInitialized方法,就像在 PHP 7.4 中检查属性是否真的被初始化一样。


推荐阅读