PHP Unit Fatal error: Call to undefined method PHPUnit_Framework_MockObject_InvocationMocker

PHP Unit Fatal error: Call to undefined method PHPUnit_Framework_MockObject_InvocationMocker

我在 hhvm 上遇到 php 单元的问题,其中 getmock() 在 phpunit 4.8.27 上失败 class 并显示以下消息

Fatal error: Call to undefined method PHPUnit_Framework_MockObject_InvocationMocker::getTableColumns() in /joomla-cms/libraries/joomla/table/table.php on line 241

测试代码失败位于https://github.com/photodude/joomla-cms/blob/patch-1/tests/unit/suites/libraries/cms/installer/JInstallerAdapterTest.php#L111 对于测试代码,此 "fails/errors" 没有致命错误的测试

$mockTableExtension = $this->getMock('JTableExtension', array('find', 'load'), array($this->getMockDatabase()));

但如果我使用存储值

$mockDatabase = $this->getMockDatabase();

并将 mockDatabase 对象类型转换为数组我得到上面列出的致命错误。

$mockTableExtension = $this->getMock('JTableExtension', array('find', 'load'), (array) $mockDatabase);

Travis 测试 mockDatabase 对象和对象类型转换为数组 var_dumped https://travis-ci.org/photodude/joomla-cms/jobs/172201634#L1427-L2178

在 php 中一切都通过并且工作正常,问题是针对 hhvm 测试的 我在模拟设置中做错了什么吗?还是有其他事情发生?

注意:我最近在 php 单元 5.6 上测试了这部分测试服并遇到了同样的问题。所以我不确定在这些测试的设置中我们没有做错什么。

我发现在 hhvm 上的一项测试中 array($this->getMockDatabase()) 存在一些问题。将 array($this->getMockDatabase()) 替换为 array(self::$driver) 所有问题都已解决。

我还将直接使用 getMock 替换为 getMockBuilder(为了与 phpunit 5.6 兼容)