为什么 PHPUnit 不将此函数计为已运行


Why isn't PHPUnit counting this function as having ran?

我的单元测试中有这样的代码:

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

它说我根本不是在打电话给foo,即使functionThatCallsFoofoo是从内部var_dumping出来的。

在公开调用的函数

和我期望的函数之间有几个函数调用。我确保链上没有调用静态函数。(最初有,但我更改了它们,看看我是否可以让它工作)

编辑我更改了expects调用以匹配直接从functionThatCallsFoo调用的方法,但它仍然不起作用。

我将

回答这个问题,因为我的代码有很多问题。如果将来其他人遇到类似的问题,希望这个答案会是一个清单。

  1. 我的最后一个方法是静态的,所以我需要使用staticExpects而不是Expect。
  2. 我的静态调用使用的是 self:: 但我需要使用 static:: ( PHP>= 5.3 )
  3. static:: 不能用于私有函数,不像 self::

最后,我现在可以理解为什么静态函数是邪恶的。