Php Symfony:如何模拟服务(FormBuilder和路由器)
我编写了一个具有以下签名的处理程序:Php Symfony:如何模拟服务(FormBuilder和路由器),php,unit-testing,symfony,Php,Unit Testing,Symfony,我编写了一个具有以下签名的处理程序: public function __construct( Store $store, array $orders, FormFactory $formFactory, Router $router) { 如何模拟FormFactory和路由器 我尝试了以下几点: $formFactory = $this->getMock('\Symfony\Component\Form\FormFactory') $router =
public function __construct(
Store $store,
array $orders,
FormFactory $formFactory,
Router $router)
{
如何模拟FormFactory和路由器
我尝试了以下几点:
$formFactory = $this->getMock('\Symfony\Component\Form\FormFactory')
$router = $this->getMock('\Symfony\Bundle\FrameworkBundle\Routing\Router')
但我收到以下错误:
AppBundle\Tests\Handler\SetUpHandlerTest::testConstructor参数1
传递给Symfony\Bundle\FrameworkBundle\Routing\Router::\uu construct()
必须实现接口
Symfony\Component\DependencyInjection\ContainerInterface,未给出任何值,
叫来
/DevRoot/vendor/phpunit/phpunit mock objects/src/Framework/MockObject/Generator.php
在第254行上,已定义
接口ContainerInterface似乎有问题
如何模拟此服务?您需要显式禁用构造函数 $formFactory->disableOriginalConstructor()
假设您的模拟扩展了初始对象,因此,除非禁用构造函数,否则它仍然会期望依赖关系。像FormFactoryInterface和UrlGeneratorInterface这样的接口更适合模拟。这意味着您只知道方法的签名,而不知道实现。是的,现在测试开始了!非常感谢。(如果您删除此评论并将您的答案作为真实答案,我将投票将其作为此问题的最佳答案)。删除并重新发布,谢谢