背景
你好,
我继承了一个laravel的代码库。有一些第三方API被用于各种各样的数据服务,我试图使软件更易于测试。其中一些API调用是通过客户端处理的,并使用服务共享。
为了继续测试,一些服务需要调用其他服务。我也尝试依赖注入它们。我在做这件事时遇到了问题。
设置
- laravel/框架:"^8.0.0
问题
以下服务需要能够在函数中依赖注入另一个服务。
namespace App\Services\ExampleService;
use App\Services\ExampleDependantService;
class SyncProfile
{
// ...
}
我已尝试在函数级别注入(这是首选):
public function sync(ExampleDependantService $exampleDependantService, /*...*/)
{
// ...
}
我还尝试在类/构造函数级别进行设置:
protected ExampleDependantService $exampleDependantService;
public function __construct(ExampleDependantService $exampleDependantService)
{
$this->exampleDependantService = $exampleDependantService;
}
在测试时,这两种方法都无法解析ExampleDependantService
,并给出如下错误:
ArgumentCountError : Too few arguments to function App\Services\ExampleService\SyncProfile::__construct(), 0 passed in [..]/SyncProfileTest.php on line 96 and exactly 1 expected ..
需要说明的是,ExampleDependantService
注册在config/app.php
中
'providers' => [
// ...
App\Services\ExampleDependantService::class
// ...
理想情况
- 我应该能够在正常使用中调用
$exampleService->sync()
- 我应该能够在测试使用中调用
$exampleService->sync($mockedExampleDependantService)
有人能帮忙吗?
先谢了
1条答案
按热度按时间6gpjuf901#
我建议在
AppServiceProvider
的register()
方法中传递参数。您还需要在那里设置依赖项,如下所示:
这样,依赖项就可以在服务的构造函数中使用。