我试图模拟一个使用魔法方法__call()的类。
运行测试时,出现"分段错误"
这是一个非常简单的类,它将调用转发到其成员对象上的方法。我认为这与使用 __call() 有关,因为当我删除它时测试通过。
我正在使用PHP 5.3.3(CentOS 6.5)和PHPunit 4.6
请参阅代码:
<?php
use Mockery as m;
class HasRoleTest extends PHPUnit_Framework_TestCase
{
public function tearDown()
{
m::close();
}
function testFoo()
{
$foo = m::mock('Foo')->makePartial();
$this->assertEquals('bar', $foo->bar());
}
}
class Foo
{
public function __call($name, $arguments)
{
if ($name == 'bar')
return 'bar';
return 'something else';
}
}
在嘲弄1.0.0-alpha
之前,使用__call
魔术方法的对象可能导致无限递归,这反过来又会导致 PHP 中的段错误。
例如,请参阅以下问题:
- https://github.com/mockery/mockery/issues/564
- https://github.com/mockery/mockery/issues/461
- https://github.com/mockery/mockery/issues/777
这似乎是自嘲1.0.0-alpha
起已修复的错误。