错误:在null上调用成员函数create(),单元测试(Mockery)



我正在尝试对">AdminService"类进行单元测试,该类具有">create(("方法,并且在构造函数中我需要一个AdminRepository依赖项。

我用mock来模拟存储库,并将这个mock传递给AdminService_contsruct((,但当我运行测试时,我得到了一个错误,上面写着:error:调用null上的成员函数create((

这是我正在尝试测试的AdminService:我阅读了这篇文章:单元测试-与Mockry::on匹配的复杂参数-正确的方法

use AppRepositoriesAdminRepository;
class AdminService {
protected $admin_repo;
public function _contsruct(AdminRepository $admin_repo){
$this->$admin_repo= $admin_repo;
}
public function create($data){
return  $this->admin_repo->create($data); 
}

}  

测试代码为:

/** @test */
public function it_can_create_Admin(){
$data=[
"first_name"=>"lama",
"last_name"=>"sonmez",
"email"=>"lamasonmez@gmail.com",
"password"=>"secret"
];

$repo_mock = Mockery::mock(AdminRepository::class);
$repo_mock->shouldReceive('create')->once()->with($data)
->andReturn('anything');
$admin_service = new AdminService($repo_mock);
$admin = $admin_service->create($data);
$this->assertInstanceOf(Admin::class,$admin);
}   

我不知道这里出了什么问题,请帮忙。

当我dd($repo_mock(为时,我的意思是它不是null
,但当我dd时($admin_service(,我得到了

AppServicesAdminService^ {#4106
#admin_repo: null
}  

哦,我弄清楚了为什么会发生这种情况,这是因为AdminRepository和AdminService中构造函数的下划线符号,它在构造键之前应该有两个下划线,像这样__construct而不是像这样
_construct

相关内容

最新更新