编程语言
首页 > 编程语言> > PHP nightly:参数必须是一个实现Countable的数组或对象

PHP nightly:参数必须是一个实现Countable的数组或对象

作者:互联网

我看到a PHP webapp中的UT failures每晚都在Travis CI中对抗PHP:

$php --version
PHP 7.2.0-dev (cli) (built: Dec  4 2016 22:49:34) ( ZTS )

这是失败的测试用例:

$payments = PaymentsHelper::refunds('DE0000000001', '2016-04-01', '2017-04-01');

$this->assertNotNull($payments);
$this->assertEquals(0, count($payments));

测试失败

1) PaymentsHelperTest::test_refunds_within_lifetime
count(): Parameter must be an array or an object that implements Countable

目前正在测试的代码包含调试日志记录,显示refunds()的返回值确实是一个数组:

Array
(
    [0] => Payment Object
        (
...
        )
)

我每晚都会在PHP中遇到一个错误吗?

解决方法:

我进一步调试了这个问题,并意识到错误发生在代码中,其中依赖项返回NULL并且代码调用count(NULL):

$bonds = $bond_factory->find_all(/* ... */);
if (count($bonds) > 0)
{
  //...
}

我决定使用null检查来保护对count()的调用:

$bonds = $bond_factory->find_all(/* ... */);
if (!is_null($bonds) && count($bonds) > 0)
{
  //...
}

PHP 7.2.0-dev现在显然对其输入不太宽容.

标签:php,unit-testing,travis-ci,phpunit
来源: https://codeday.me/bug/20190627/1309027.html