Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony:如何模拟服务(FormBuilder和路由器)_Php_Unit Testing_Symfony - Fatal编程技术网

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这样的接口更适合模拟。这意味着您只知道方法的签名,而不知道实现。

是的,现在测试开始了!非常感谢。(如果您删除此评论并将您的答案作为真实答案,我将投票将其作为此问题的最佳答案)。删除并重新发布,谢谢