当在其他地方使用教义时,如何模拟控制器操作的教义服务

时间:2017-10-05 16:52:06

标签: php symfony phpunit

我有一个控制器操作,其中包含以下代码:

$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模板实际上调用了一个单独的控制器动作,该动作也使用了教义。因此,它会导致应用程序中断,因为它使用我注入容器的模拟学说对象。

有没有办法只对我正在测试的动作使用模拟学说服务?否则,有没有其他方法可以做我想做的事情?我没有想法。

1 个答案:

答案 0 :(得分:0)

作为替代方法'您可以停止使用Container作为服务定位器,而不是在任何地方注入它只需要将您需要的服务注入控制器/其他服务。