1

我正在尝试存根 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
4

1 回答 1

1

我不知道原始类,但它看起来send实际上不是它的方法,而是通过 magic 调用__call。所以如果你想模拟它,你必须明确地做:

...->getMock(array('get', 'send'));
于 2013-02-12T18:48:24.313 回答