PHPUnit存根方法返回NULL?

时间:2012-11-05 23:04:33

标签: php unit-testing phpunit

我正在尝试使用this method described by the author of PHPUnit来模拟一个单例,并将其中一个方法存根:

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'字符串呢?我做错了什么?

3 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,对我来说,问题是我调用的方法并不存在于原始对象上,而是由__call处理。解决方案最终看起来像:

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

答案 1 :(得分:1)

我希望这可以提供帮助,这是我对你的问题的全部复制品。它会打印出所需的“条形图”。我建议检查你运行的是最新版本的phpunit和php我运行:

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)

我希望这很有帮助。

答案 2 :(得分:1)

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