PHP单位致命错误:调用未定义的方法PHPUnit_Framework_MockObject_InvocationMocker

时间:2016-11-17 23:04:34

标签: php unit-testing joomla phpunit hhvm

我在hhvm上遇到php单元的问题,其中getmock()在phpunit 4.8.27上因为以下消息的类而失败

  

致命错误:在第241行的/joomla-cms/libraries/joomla/table/table.php中调用未定义的方法PHPUnit_Framework_MockObject_InvocationMocker :: getTableColumns()

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

$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 unit 5.6上测试了这部分测试套装并得到了同样的问题。所以我不确定在设置这些测试时我们没有错。

1 个答案:

答案 0 :(得分:0)

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

我还替换了getMockgetMockBuilder的直接使用(为了与phpunit 5.6兼容)