2015-01-13 3 views
2

Я пытаюсь высмеять класс, который использует магический метод __call().ошибка сегментации при издевательских классах с __call() в PHP

Когда я запускаю тесты, я получил «Ошибка сегментирования Fault»

Это очень простой класс, который перенаправляет вызовы методов на своих объектах членов. Я думаю, что это связано с использованием __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'; 
    } 
} 
+0

Я читал в онлайн-руководстве, чтобы использовать '\ Mockery as m;' с обратной косой чертой. Это может не решить вашу проблему, но это просто вещь, которую я заметил – Phate01

ответ

1

До издевательство 1.0.0-alpha, объекты с магическим методом __call может привести к бесконечной рекурсии , что, в свою очередь, вызовет segfault в PHP.

См, например, эти вопросы:

Это, кажется, ошибка, которая была исправлена, как издевательство 1.0.0-alpha.

Смежные вопросы