我在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上测试了这部分测试套装并得到了同样的问题。所以我不确定在设置这些测试时我们没有错。
答案 0 :(得分:0)
我发现在hhvm的一个测试中array($this->getMockDatabase())
存在一些问题。用array($this->getMockDatabase())
替换array(self::$driver)
所有问题都已解决。
我还替换了getMock
与getMockBuilder
的直接使用(为了与phpunit 5.6兼容)