PHPUnit存根仅适用于第一种方法


PHPUnit stub only works for the first method

我正在尝试存根Amazon的实例元数据类,因为它调用的内部URL只能在EC2实例中工作,不能从外部调用。我的问题是无法识别方法"send"。不过,"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

我不知道原始类,但看起来send实际上不是它的一个方法,而是通过神奇的__call调用的。因此,如果你想嘲笑它,你必须明确地这样做:

...->getMock(array('get', 'send'));
相关文章: