2015-06-04 5 views
1

У меня есть обработчик я написал, что имеет следующую подпись:Symfony: как издеваются услуги (FormBuilder и маршрутизатор)

public function __construct(
    Store $store, 
    array $orders, 
    FormFactory $formFactory, 
    Router $router) 
{ 

Как я могу издеваться FormFactory и маршрутизатор?

Я tryied следующее:

$formFactory = $this->getMock('\Symfony\Component\Form\FormFactory') 
$router = $this->getMock('\Symfony\Bundle\FrameworkBundle\Routing\Router') 

Но я получаю следующее сообщение об ошибке:

AppBundle\Tests\Handler\SetUpHandlerTest::testConstructor Argument 1 passed to Symfony\Bundle\FrameworkBundle\Routing\Router::__construct() must implement interface Symfony\Component\DependencyInjection\ContainerInterface, none given, called in /DevRoot/vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Generator.php on line 254 and defined

Кажется, есть проблема с интерфейсом ContainerInterface.

Как я могу издеваться над этим сервисом?

+0

Да, теперь тест работает! Спасибо! (Если вы удалите этот комментарий и поместите свой ответ в качестве реального ответа, я буду голосовать за него как лучший для этого вопроса). – Aerendir

+0

удален и отправлен обратно, спасибо –

ответ

3

Необходимо явно отключить конструктор.

$formFactory->disableOriginalConstructor();

Считает, что ваш макет расширяет исходный объект, поэтому, если вы не отключили конструктор будет ожидать зависимости по-прежнему.

0

Интерфейсы, такие как FormFactoryInterface и UrlGeneratorInterface, более предпочтительны для насмешек. Это означает, что вы знаете только о сигнатуре метода, но не о реализации.

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