0

テンプレート メソッドの設計パターンを実装したコードがあるとします。そして、テンプレートメソッドでメソッド呼び出しのシーケンスとカウントをテストしたいと思います。PHPUnit モックを使用しようとしています。私のソースコードは次のようになります。

class Foo {

    public function __construct() {}

    public function foobar() {
        $this->foo();
        $this->bar();
    }

    protected function foo() {}

    protected function bar() {}
}


class FooTest extends PHPUnit_Framework_TestCase {

    public function testFoo() {
        $fooMock = $this->getMock('Foo', array('foo', 'bar'));

        $fooMock->foobar();

        $fooMock->expects($this->once())->method('foo');
        $fooMock->expects($this->once())->method('bar');
    }
} 

その結果、次のようなエラーが発生しました。

PHPUnit_Framework_ExpectationFailedException : 
Expectation failed for method name is equal to <string:foo> when invoked 1 time(s).
Method was expected to be called 1 times, actually called 0 times.

モック オブジェクトを使用して、このようなシナリオでメソッド呼び出しをカウントすることは可能ですか?

4

1 に答える 1

0

それは私の愚かな間違いです。間違ったモック オブジェクトの作成順序:

// ...

public function testFoo() {
    $fooMock = $this->getMock('Foo', array('foo', 'bar'));
    $fooMock->expects($this->once())->method('foo');  // (!) immediately after          
    $fooMock->expects($this->once())->method('bar');  // mock object instantiation

    $fooMock->foobar();
} 
于 2014-02-17T15:38:21.860 に答える