8

我正在尝试使用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'字符串?我做错了什么?

4

3 回答 3

3

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

$this->_foo->expects($this->any())
    ->method('__call')
    ->with($this->equalTo('bar'))
    ->will($this->returnValue('bar'));
于 2016-03-04T12:27:42.653 回答
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)

我希望这可以帮到你。

于 2012-11-14T13:31:33.200 回答
1

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

于 2012-12-09T01:28:50.410 回答