我有一个控制器操作,其中包含以下代码:
$repository = $this->get("doctrine")->getRepository(User::class);
$user = $repository->findOneBy(array('username' => $request->request->get("username")));
我想模拟存储库。起初我不知道该怎么做,但后来我找到了这个帖子:Testing Controllers in Symfony2 with Doctrine
从那里的答案,我推测我应该创建一个doctrine服务和存储库对象的模拟,并告诉mockbuilder存储库对象返回我想要测试的实体。然后我应该使用以下代码行替换doctrine服务:
$client->getContainer()->set("doctrine", $doctrineMockObject);
然后提出请求:
$client->request("POST", "/checkUsername");
这个问题是有一个twig模板实际上调用了一个单独的控制器动作,该动作也使用了教义。因此,它会导致应用程序中断,因为它使用我注入容器的模拟学说对象。
有没有办法只对我正在测试的动作使用模拟学说服务?否则,有没有其他方法可以做我想做的事情?我没有想法。
答案 0 :(得分:0)
作为替代方法'您可以停止使用Container作为服务定位器,而不是在任何地方注入它只需要将您需要的服务注入控制器/其他服务。