PHPUnit存根方法是否返回NULL?

PHPUnit存根方法是否返回NULL?,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,我试图用它的一个方法来模拟一个单例: public function setUp() { $this->_foo = $this->getMockBuilder('Foo') ->disableOriginalConstructor() ->getMock(); $this->_foo->expects($this->any()) ->method('bar') -&

我试图用它的一个方法来模拟一个单例:

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
。据我所知,当你模拟一个对象时,所有的方法都被替换为stub,这些stub返回
NULL
,除非像我这样显式地stub。既然我已经将
bar()
方法存根,为什么它不转储预期的
'bar'
字符串呢?我做错了什么?

我希望这能有所帮助,这完全是我的问题。它打印出所需的“条”。我建议检查您是否正在运行phpunit和我运行的php的最新版本:

PHPUnit 3.6.10和php5.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)

我希望这是有帮助的

这最终成为我的PHPUnit版本的一个问题。我更新到了最新的稳定版本,无法复制该问题。

我遇到了相同的问题,对我来说,问题是我调用的方法在原始对象上不存在,正在由
\u call
处理。解决方案最终看起来像:

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