我的单元测试中有这样的代码:
// $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
是从内部var_dumping出来的。
和我期望的函数之间有几个函数调用。我确保链上没有调用静态函数。(最初有,但我更改了它们,看看我是否可以让它工作)
编辑我更改了expects
调用以匹配直接从functionThatCallsFoo
调用的方法,但它仍然不起作用。
我将
回答这个问题,因为我的代码有很多问题。如果将来其他人遇到类似的问题,希望这个答案会是一个清单。
- 我的最后一个方法是静态的,所以我需要使用staticExpects而不是Expect。
- 我的静态调用使用的是 self:: 但我需要使用 static:: ( PHP>= 5.3 )
- static:: 不能用于私有函数,不像 self::
最后,我现在可以理解为什么静态函数是邪恶的。