2012-11-05 3 views
8

Я пытаюсь издеваться синглтона с помощью this method described by the author of PHPUnit и заглушки один из его методов:PHPUnit метод заглушки, возвращающий NULL?

public function setUp() { 
    $this->_foo = $this->getMockBuilder('Foo') 
     ->disableOriginalConstructor() 
     ->getMock(); 

    $this->_foo->expects($this->any()) 
     ->method('bar') 
     ->will($this->returnValue('bar')); 

    var_dump($this->_foo->bar()); 
} 

Проблема заключается в том, что свалки NULL каждый раз. Насколько я понимаю, когда вы издеваетесь над объектом, все методы заменяются заглушками, которые возвращают NULL, если явным образом не заштрихован, как я. Итак, так как я опустил метод bar(), почему он не сбрасывает ожидаемую строку 'bar'? Что я сделал не так?

ответ

1

Это оказалось проблемой с моей версией PHPUnit. Я обновился до последней стабильной версии и не смог дублировать эту проблему.

1

Надеюсь, это поможет, это моя целая реплика вашей проблемы. Он печатает желаемый «бар». Я рекомендую проверить, что вы используете последние версии phpunit и php i:

PHPUnit 3.6.10 и PHP 5.4.6-1ubuntu1.

$suite = new PHPUnit_Framework_TestSuite("TestTest"); 


class Foo { 

    function Bar() 
    { 
     return null; 
    } 
} 

class TestTest extends PHPUnit_Framework_TestCase 
{ 
    private $test_max_prod; 
    private $initial; 

    public function setUp() { 
     $this->_foo = $this->getMockBuilder('Foo') 
      ->disableOriginalConstructor() 
      ->getMock(); 

     $this->_foo->expects($this->any()) 
      ->method('bar') 
      ->will($this->returnValue('bar')); 

     var_dump($this->_foo->bar()); 
    } 

    function tearDown() { 

    } 

    function testTest(){} 



} 

Выход

PHPUnit 3.6.10 by Sebastian Bergmann. 

.string(3) "bar" 


Time: 0 seconds, Memory: 2.50Mb 

OK (1 test, 1 assertion) 

Я надеюсь, что это было полезно.

3

Я столкнулся с той же проблемой, для меня проблема оказалась в том, что метод, который я вызывал, не существовал на исходном объекте и обрабатывался __call. Решение получило:

$this->_foo->expects($this->any()) 
    ->method('__call') 
    ->with($this->equalTo('bar')) 
    ->will($this->returnValue('bar')); 
Смежные вопросы