在服务类中注入存储库类,然后尝试在测试中启动服务类而不传递存储库会导致错误(Laravel)

问题描述 投票:0回答:1

说我有:

class SomeService implements SomeInterface
{
    public function __construct(private SomeRepository $repo)
    {}

    public function createSomething(array $data)
    {
    }
}

如果我想用 PHPUnit 测试这个服务类,我会得到一个错误“传递给 SomeService::__construct() 的参数太少”

class SomeServiceTest {
    protected function setUp()
    {
        $this->service = new SomeService;
    }

    // some tests using above service...
}

我在互联网上看到了很多这样的例子 - 但为什么会导致这个错误?

我错过了什么吗?您不想再次将存储库传递给测试中的构造函数。

我处理这个问题的方式是错误的吗?

php laravel
1个回答
0
投票

当然,你必须将 SomeRepository 传递给 SomeService。

$this->mock(SomeRepository::class, function($mock) {
    $mock->shouldReceive('')->...
});

$service = new SomeService(app(SomeRepository::class));

这似乎是 Laravel 控制器中自动解决的,但那是因为 Laravel 正在为你做这件事。 通常情况下,你必须自己向构造函数传递值。

© www.soinside.com 2019 - 2024. All rights reserved.