8

PHPUnit の作成者が説明したこのメソッドを使用してシングルトンをモックし、そのメソッドの 1 つをスタブしようとしています。

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 バージョンの問題でした。最新の安定版リリースに更新しましたが、問題を再現できませんでした。

于 2012-12-09T01:28:50.410 に答える
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 に答える