2012-05-10 6 views
0

私は私のユニットテスト内でこのようなコードを持っている:PHPUnitがこの関数を実行したと数えないのはなぜですか?

// $item_id was defined above 
$originalMock = $this->getMock('Item', array('foo'), array(
    $item_id 
)); 

$originalMock->expects($this->once())->method('foo'); 

$originalMock->functionThatCallsFoo(); 

私がfunctionThatCallsFoo & fooが内から出てvar_dumpingされているにもかかわらず、全くfooを呼び出していないよと言っています。

公に呼び出された関数と私が期待している関数の間にはいくつかの関数呼び出しがあります。チェーンの下に呼び出される静的関数がないことを確認しました。

EDIT 私が直接functionThatCallsFooから呼び出されるメソッドを一致させるために、私のexpectsコールを変更し、それはまだ動作しませんでしたが(そこ最初にあったが、私はこれがすべてで働いて得ることができるかどうかを確認するためにそれらを変更しました)。

+0

'getMock()'に模擬メソッドのリストを指定していません。 –

+0

@MikeB "2番目の(オプションの)パラメータを指定すると、名前が配列内にあるメソッドだけが設定可能なテストdoubleに置き換えられます。2番目のパラメータは、配列( 'foo'他の方法の変更はありません。 http://www.phpunit.de/manual/3.6/en/test-doubles.htmlいくつかの中間関数があるのでクラス全体を模擬したかった –

+0

はい、あなたの意図は 'fooの動作を変更することです) 'そう?クラス内の具体的な 'foo()'メソッドの呼び出しをカウントすることはできません。擬似/スタブ付きのメソッドだけです。 –

答えて

1

私は自分のコードに問題があるので、この質問に答えるつもりです。うまくいけば、この回答は、他の誰かが将来同様の問題を抱えている場合、チェックリストのビットになるでしょう。

  1. 私の最後の方法は、私は代わりに期待し
  2. 私の静的呼び出しは自己を使用していた:: staticExpectsを使用するために必要な私は:: staticを使用するために必要な静的でした(PHP> = 5.3)
  3. 静的: :自己とは異なり、私的関数では使用できません::

最後に、私は静的関数がなぜ邪悪であるのかを見ることができます。

関連する問題