我正在尝试存根Amazon的实例元数据类,因为它调用的内部URL只能在EC2实例中运行,并且无法从外部调用。我的问题是无法识别方法“发送”。方法“get”工作正常。这是错误Fatal error: Call to undefined method Stub\Amazon\StubInstanceMetadata::send() in ...etc, etc
$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指出的那个。第二个是返回对$ this的引用,PHPUnit有它自己的方法,所以我应该这样做:
$stub->expects($this->any())
->method('get')
->will($this->returnSelf()); // don't use returnValue() here
答案 0 :(得分:1)
我不知道原始类,但看起来send
实际上并不是它的一种方法,而是通过魔法__call
调用。因此,如果你想模仿它,你必须明确地做:
...->getMock(array('get', 'send'));