说我有以下课程:
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的实例,而是找到了mock对象。任何人都可以了解如何测试这种情况吗?在使用模拟和存根进行测试时,我是初学者。
谢谢!
答案 0 :(得分:0)
感谢fab的评论。我做了以下更改并使其正常工作,
$file = $this->getMockBuilder('Symfony\Component\HttpFoundation\File\UploadedFile')
->disableOriginalConstructor()
->getMock();
答案 1 :(得分:-1)
自PHP 5.5.16起,Chieh解决方案不再使用。 See reference.
可能的解决方案是在/tmp
中使用setUp()/tearDown()
创建一个临时虚拟文件,并将其传递给构造函数。然后我们模拟了返回所需内容的必要方法。
注意:UploadedFile
将要求您传递两个参数