2

假设我有以下课程:

class Document
{
  private file;

  public function setFile(UploadedFile $file)
  {
    $this->file = $file;
  }

  public function getExt()
  {
    return $this->file->guessExtension();
  }
}

我想测试 getExt() 方法。我尝试按如下方式设置测试:

$file = $this->getMock('UploadedFile');

$file->expects($this->at(0))
  ->method('guessExtension')
  ->will($this->returnValue('png'));

$doc = new Document();
$doc->setFile($file);
...

但是,它给了我一个错误,说 setFile() 需要 UploadedFile 的实例,而是找到了模拟对象。任何人都可以阐明如何测试这种情况吗?在使用模拟和存根进行测试时,我是初学者。

谢谢!

4

2 回答 2

0

感谢fab的评论。我进行了以下更改并使其正常工作,

$file = $this->getMockBuilder('Symfony\Component\HttpFoundation\File\UploadedFile')
        ->disableOriginalConstructor()
        ->getMock();
于 2013-05-20T01:05:42.377 回答
-1

自 PHP 5.5.16 起,不再使用 Chieh 解决方案。见参考。

/tmp一个可能的解决方案是在其中创建一个临时虚拟文件setUp()/tearDown()并将其传递给构造函数。然后我们模拟了所需的方法以返回所需的内容。

注意UploadedFile将要求您传递两个参数

于 2014-10-22T16:19:39.453 回答