1
我試圖存根亞馬遜的實例元數據類,因爲它調用的內部URL只能在EC2實例內工作,不能從外部調用。我的問題是,「發送」方法無法識別。 「get」方法雖然工作正常。這是錯誤Fatal error: Call to undefined method Stub\Amazon\StubInstanceMetadata::send() in ...etc, etc
PHPUnit存根只適用於第一種方法
$stub = $this->getMockBuilder('Aws\Common\InstanceMetadata\InstanceMetadataClient')
->disableOriginalConstructor()
->getMock();
$stub->expects($this->any())
->method('get')
->will($this->returnValue($this));
$stub->expects($this->any())
->method('send')
->will($this->returnValue(json_encode(array('test' => 'value'))));
編輯:這最終是兩個不同的問題的組合。第一個是@fab指出的那個。第二個是,要參考返回$此,PHPUnit的有它自己的方法,所以我應該這樣做:
$stub->expects($this->any())
->method('get')
->will($this->returnSelf()); // don't use returnValue() here
你是對的!這不是一個真正的方法,但是這個解決方案也不能工作:(我也試過通過'$ this-> setMethods(array('get','send'))'手動指定方法無濟於事。非常令人沮喪! – Julian 2013-02-12 19:41:32
對,使用'MockBuilder'應該是'setMethods()'。如果這不起作用,我不知道,對不起。 – 2013-02-13 06:32:23
使用setMethods()或 - > getMock(array('get', 'send'))只返回只有這些方法的類,如果你沒有提供setMethods()或者帶有方法的數組,默認情況下所有的公共方法都會被stubbed – qrazi 2013-02-13 07:37:28