Я читал раздел тестовых удвоений руководства phpunit, чтобы выяснить, можно ли создать заглушку из интерфейса. Мне нужно подделать вызов метода из объекта, который реализует интерфейс, но я не хочу создавать для этого поддельный класс. Является ли это способом создания экземпляра объекта, который реализует интерфейс без фактического определения класса такого объекта?Интерфейс заглушки с phpunit
Приведенный ниже код не работает, но может быть полезно, чтобы понять, что я пытаюсь достичь, Спасибо заранее ребята
/**
* @test
* @expectedException InvalidArgumentException
*/
public function searchAlbumThrowExceptionWhenDataBaseConnectionFailed(){
$albumRepositoryStub = $this->getMock('AlbumFinder\Repository\AlbumRepositoryInterface');
$albumRepositoryStub->method('fetchPage')
->will($this->throwException(new \Exception()));
//code
}
PHPUnit mocks действительно работают с интерфейсами. Пожалуйста, сообщите нам подробную информацию об ошибке, которую вы получаете. – gontrollez
это ошибка, которую я вижу при запуске теста: вызов неопределенного метода 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