2014-09-30 6 views
0

Я читал раздел тестовых удвоений руководства phpunit, чтобы выяснить, можно ли создать заглушку из интерфейса. Мне нужно подделать вызов метода из объекта, который реализует интерфейс, но я не хочу создавать для этого поддельный класс. Является ли это способом создания экземпляра объекта, который реализует интерфейс без фактического определения класса такого объекта?Интерфейс заглушки с phpunit

Приведенный ниже код не работает, но может быть полезно, чтобы понять, что я пытаюсь достичь, Спасибо заранее ребята

/** 
* @test 
* @expectedException InvalidArgumentException 
*/ 
public function searchAlbumThrowExceptionWhenDataBaseConnectionFailed(){ 
    $albumRepositoryStub = $this->getMock('AlbumFinder\Repository\AlbumRepositoryInterface'); 

    $albumRepositoryStub->method('fetchPage') 
    ->will($this->throwException(new \Exception())); 

    //code 
} 
+0

PHPUnit mocks действительно работают с интерфейсами. Пожалуйста, сообщите нам подробную информацию об ошибке, которую вы получаете. – gontrollez

+0

это ошибка, которую я вижу при запуске теста: вызов неопределенного метода Mock_AlbumRepositoryInterface_ae3e29c9 :: method() Я попытался явно установить метод при создании макета, как это: $ albumRepositoryStub = $ this-> getMock ('AlbumFinder \ Репозиторий \ AlbumRepositoryInterface ', массив (' fetchPage ')); Я все еще получаю ту же ошибку. Вот объявление интерфейса: интерфейс AlbumRepositoryInterface { \t const ELEMENTS_PER_PAGE = 5; \t \t public function fetchPage ($ searchTerm = '', $ pageNumber = 0, $ elementsPerPage = self :: ELEMENTS_PER_PAGE); } – Frank

ответ

0

Для этой работы, необходимо, чтобы интерфейс автозагрузки. Убедитесь, что по телефону:

$this->assertTrue(interface_exists('AlbumFinder\Repository\AlbumRepositoryInterface')); 

только в начале испытания.

Если интерфейс загружен, проверьте правильность имени метода. Кроме того, он должен работать ...

0

Я нашел проблему с моим кодом. Я пропустил вызов метода «Ожидает», когда высмеивал метод интерфейса. Это код, который сейчас работает для меня: $ albumRepositoryStub = $ this-> getMock ('AlbumFinder \ Repository \ AlbumRepositoryInterface');

$albumRepositoryStub->expects($this->any()) 
    ->method('fetchPage') 
    ->will($this->throwException(new \Exception()));