2013-05-19 4 views
1

Скажем, у меня есть следующий класс:РНРипхЬ: Pass фиктивного объекта в качестве параметра метода

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 и фиктивный объект найден вместо этого. Может ли кто-нибудь пролить свет на то, как проверить этот сценарий? Я новичок, когда дело доходит до тестирования с помощью mocks и stub.

Спасибо!

+0

Это не должно быть проблемой, генерируемый фиктивный класс расширяет исходный класс. Вы используете случайные пространства? –

ответ

-1

Спасибо комментарию fab. Я сделал следующее изменение и получил его работу:

$file = $this->getMockBuilder('Symfony\Component\HttpFoundation\File\UploadedFile') 
     ->disableOriginalConstructor() 
     ->getMock(); 
-1

С PHP 5.5.16 Решение Chieh больше не может использоваться. See reference.

Возможное решение создает временный файл-заглушку в /tmp с setUp()/tearDown() и передает его в конструктор. Затем мы издевались над необходимыми методами, чтобы вернуть то, что нужно.

Примечание: UploadedFile потребует от вас пройти два параметра

Смежные вопросы