2017-10-05 83 views
1

我有一个包含类似下面的一些代码控制器动作中使用:如何嘲笑学说服务控制器动作时学说别处

$repository = $this->get("doctrine")->getRepository(User::class); 
$user = $repository->findOneBy(array('username' => $request->request->get("username"))); 

我想嘲笑库。起初,我不知道该怎么做,但后来我发现这个SO帖子:Testing Controllers in Symfony2 with Doctrine

从那里的答案,我推测,我应该创建一个模拟的教条服务和存储库对象,并告诉mockbuilder存储库对象返回我想测试的实体。然后,我应该使用下面的代码行替换学说服务:

$client->getContainer()->set("doctrine", $doctrineMockObject); 

,然后发出请求:

$client->request("POST", "/checkUsername"); 

的问题,这是有实际调用单独的树枝模板控制器的行为,而且该行为也使用原则。所以这会导致应用程序中断,因为它使用了我注入到容器中的模拟教义对象。

有没有什么办法只为我正在测试的操作使用模拟教义服务?否则,有没有其他方法可以做我想做的事情?我没有想法。

回答

0

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