0

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

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

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

$originalMock->functionThatCallsFoo();

它是说我根本没有打电话foo,即使functionThatCallsFoo&foo是从内部转储的。

在公开调用的函数和我期望的函数之间有几个函数调用。我确保没有调用链下的静态函数。(最初有,但我改变了它们,看看我能不能让它工作)

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

4

1 回答 1

1

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

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

最后,我现在明白为什么静态函数是邪恶的了。

于 2012-05-10T15:49:09.023 回答