2015-07-10 1 views
1

Я не уверен, что я делаю неправильно /. Я получаю ошибку:Стыковые интерфейсы в модуле PHP

Configuration read from /vagrant/freya-component-pagebuilder/phpunit.xml 

....E........ 

Time: 50 seconds, Memory: 83.25Mb 

There was 1 error: 

1) PageSectionTest::testBuildSectionsNotNull 
Argument 3 passed to Freya\Component\PageBuilder\PageSection\PageSection::buildSections() must be an instance of Freya\Component\PageBuilder\FieldHandler\IFieldHandler, instance of Mock_IFieldHandler_4f9ceb0e given, called in /vagrant/freya-component 
-pagebuilder/tests/PageSectionTest.php on line 58 and defined 

/vagrant/freya-component-pagebuilder/Freya/Component/PageBuilder/PageSection/PageSection.php:24 
/vagrant/freya-component-pagebuilder/tests/PageSectionTest.php:58 
/usr/local/bin/vendor/phpunit/phpunit/src/TextUI/Command.php:151 
/usr/local/bin/vendor/phpunit/phpunit/src/TextUI/Command.php:103 

FAILURES! 
Tests: 13, Assertions: 4, Errors: 1. 

Generating code coverage report in HTML format ... done 

я имею в виду, кажется довольно очевидным, но мой тест насмехаясь интерфейс ....

public function testBuildSectionsNotNull() { 
    $stub = $this->getMockBuilder('IFieldHandler') 
       ->setMethods(array('getFields')) 
       ->getMock(); 

    $stub->method('getFields') 
     ->with(111) 
     ->willReturn(array('something' => 'something else')); 

    $sections = $this->pageSectionClassInstance->buildSections($this->parentPage, 'child_pages', $stub, '_default_partial'); 
    $this->assertNotEmpty($section); 
} 

Он знает, что это существует, потому что:

use Freya\Component\PageBuilder\PageSection\PageSection; 
use Freya\Component\PageBuilder\FieldHandler\IFieldHandler; 
use Freya\Factory\Pattern; 

class PageSectionTest extends WP_UnitTestCase { ... } 

I попытался насмехаться над классом, который реализует интерфейс, но это тоже не сработало. Аргументом три является $stub. Так что мой вопрос: Почему это не работает? Я издеваюсь над интерфейсом ... Класс существует и виден.

ответ

1

Вам необходимо передать полное имя $this->getMockBuilder(). В вашем примере вам нужно передать строку 'Freya\Component\PageBuilder\FieldHandler\IFieldHandler'.

Если вы используете PHP 5.5 или новее, вы также можете использовать магическую константу вместо строки. В вашем примере это будет IFieldHandler::class.

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

  • Нет связанных вопросов^_^