Php 如何模拟Laravel5中的特性并在存储库中测试create方法?

Php 如何模拟Laravel5中的特性并在存储库中测试create方法?,php,unit-testing,laravel,testing,laravel-5,Php,Unit Testing,Laravel,Testing,Laravel 5,所以我正在学习如何测试。首先,我试图理解并遵循坚实的原则,因为我想这有助于以后的测试 因此,我的UserController的store方法中充斥着大量的代码,比如授权用户、加密密码、触发事件等等 因此,在我的存储库中使用了create方法之后,它看起来很干净,只有一个职责,即输入和输出,看起来是这样的: 公共函数存储(CreateUserRequest$request) { $user=$this->user->create($request->all()); 返回响应()->jsend( $

所以我正在学习如何测试。首先,我试图理解并遵循坚实的原则,因为我想这有助于以后的测试

因此,我的
UserController
store
方法中充斥着大量的代码,比如授权用户、加密密码、触发事件等等

因此,在我的存储库中使用了
create
方法之后,它看起来很干净,只有一个职责,即输入和输出,看起来是这样的:

公共函数存储(CreateUserRequest$request)
{
$user=$this->user->create($request->all());
返回响应()->jsend(
$data=$user,
$presenter=$this->presenter,
$status='success',
$message='Resource Created Successfully',
$code=201
);
}
注意:
$this->user
实际上是存储库实例,而不是模型本身

我的用户存储库的
创建方法
如下所示:

公共函数创建(数组$data)
{
//$this->authorize('store',$this->model);
$data['password']=bcrypt($data['password']);
$user=$this->model->create($data);
事件(创建新用户($user));
返回$user;
}
我编写的测试用例如下所示:


$mock = Mockery::mock(Gate::class);
$this->app->instance(Gate::class, $mock);

$mock->shouldReceive('authorize')->once();