说我有:
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...
}
我在互联网上看到了很多这样的例子 - 但为什么会导致这个错误?
我错过了什么吗?您不想再次将存储库传递给测试中的构造函数。
我处理这个问题的方式是错误的吗?
当然,你必须将 SomeRepository 传递给 SomeService。
$this->mock(SomeRepository::class, function($mock) {
$mock->shouldReceive('')->...
});
$service = new SomeService(app(SomeRepository::class));
这似乎是 Laravel 控制器中自动解决的,但那是因为 Laravel 正在为你做这件事。 通常情况下,你必须自己向构造函数传递值。