Laravel 拉威尔没有拿起模拟课

Laravel 拉威尔没有拿起模拟课,laravel,phpunit,Laravel,Phpunit,在我的控制器中,我使用的类如下: public function book($id, CalRequest $request) { $event = $this->repo->find($id); (new CalAuthorisation()) ->setEvent($event) ->canBook(); $this->booking->book($event, $request); } 我在嘲

在我的控制器中,我使用的类如下:

public function book($id, CalRequest $request)
{
    $event = $this->repo->find($id);

    (new CalAuthorisation())
        ->setEvent($event)
        ->canBook();

    $this->booking->book($event, $request);
}
我在嘲笑一个像下面这样的班级:

$auth = \Mockery::mock(CalAuthorisation::class)->makePartial();
$this->app->bind(CalAuthorisation::class, function() use ($auth) {
    return $auth;
});

$auth->shouldReceive('canBook')->once()->andReturn(true);

但是,如果我
dd
canBook()
函数中,我仍然会进入其中。我为
CalRequest
类准备了一个类似的模拟,效果很好。任何关于为什么这不起作用的建议

依赖注入是指将不同的实现注入到逻辑中。使用new关键字时,
PHP
将获取某个类,并且仅获取该类
Laravel
通过容器解决依赖项注入问题,因此必须使用容器才能使其工作

有两种方法,使用
app()
resolve()
。其次,您可以将类注入到
Laravel
类(如作业、命令、控制器等)上的方法中,这将通过容器解决

使用
resolve()

通过控制器方法注入它

public function book($id, CalRequest $request, CalAuthorisation $calAuth)
{
    $event = $this->repo->find($id);

    $calAuth->setEvent($event)
        ->canBook();
public function book($id, CalRequest $request, CalAuthorisation $calAuth)
{
    $event = $this->repo->find($id);

    $calAuth->setEvent($event)
        ->canBook();