断言PHPUnit对象具有整数属性

Nic*_*ery 7 php phpunit

我正在使用PHPUnit,我必须检查json_decode结果.我有一个包含整数属性的对象,您可以在调试器视图中看到:

我的对象的调试器视图

当我这样做:

$this->assertObjectHasAttribute('1507',$object);
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

PHPUnit_Framework_Assert::assertObjectHasAttribute() must be a valid attribute name
Run Code Online (Sandbox Code Playgroud)

$object是一个例子stdClass

AD7*_*six 6

数字属性异常,PHPUnit不接受它作为有效的属性名称:

private static function isAttributeName(string $string) : bool
{
    return preg_match('/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $string) === 1;
}
Run Code Online (Sandbox Code Playgroud)

因此,最好的做法是测试对象是否具有属性,而是检查数组是否具有键.

json_decode返回一个对象一个数组

如文档中所述:

mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

...

ASSOC

  • 如果为TRUE,则返回的对象将转换为关联数组.

因此,适当的测试方法是:

function testSomething() {
    $jsonString = '...';
    $array = json_decode($jsonString, true);
    $this->assertArrayHasKey('1507',$array);
}
Run Code Online (Sandbox Code Playgroud)