【发布时间】:2021-07-29 11:52:46
【问题描述】:
我正在尝试模拟一项服务以测试我的控制器方法之一:
class ExampleController extends AbstractController
{
/**
* @Route("/example", name="app_example", methods={"POST"})
*/
public function exampleMethod(Request $request, IService $service) {}
}
在测试环境中,我想连接一个服务的模拟,但我不知道如何手动连接控制器参数(而不是服务参数)。这是我到目前为止所做的,但它不起作用:
//services_test.yaml
App\Controller\ExampleController:
arguments:
$service: '@App\Service\ServiceMock'
我收到以下错误:
Invalid service "App\Controller\ExampleController": class has no constructor.
【问题讨论】:
-
arguments指令提供了一种通过构造函数注入依赖项的方法,所以如果你使用它,你必须像@user9245255 所说的那样添加构造函数。请您添加单元测试用例的代码。 -
您是否正在尝试进行某种集成测试?如果是这样,那么您只需在测试环境中定义您的服务。实际上将参数注入到动作方法中的 Symfony 代码不是您可以修改的。至少不容易。
标签: symfony testing controller symfony5