我正在为Symfony 4.4应用程序编写测试,我需要模拟一个名为TokenService
的服务,这是我需要测试的一些类(存储库,服务)的依赖项,但我不确定如何通过DI传递一些依赖项:
self::$container->get('App\Services\classToTest') // Not able to pass dependencies ?
我是否被迫示例化类并做类似这样的事情:
$classToTest = new \App\Services\classToTest($depencencyOne,$tokenMock,...)
另外,我只需要模拟其中一个依赖项,那么我是否必须传递所有其他依赖项?
1条答案
按热度按时间6bc51xsx1#
您可以从测试服务容器中
get()
,但也可以set()
!我可以给予一个真实的例子,我最近在一些测试中需要用它的模拟实现替换HttpClient:
但应该注意的是,我必须将服务公开才能覆盖它:
如果你没有(或者不能)替换服务容器中的依赖项,那么你需要自己示例化测试过的服务并获取每个依赖项:
如果问题来自您自己的代码,请确保遵循良好的实践,使您的代码更容易测试(主要是依赖注入和依赖反转原则)。