如何在phpunit/laravel中模拟控制器内部的API调用

如何在phpunit/laravel中模拟控制器内部的API调用,phpunit,guzzle,laravel-8,Phpunit,Guzzle,Laravel 8,我正在使用phpunit在Laravel8中创建单元测试,我有一个控制器,它使用外部API为使用Guzzle HTTP客户端的函数获取数据 我将调用guzzle的方法放在Controller.php中,这样就可以通过扩展这个类在任何其他控制器中访问它 class Controller extends BaseController { protected function getAPI($url, $params = []) { $test_api = new Cl

我正在使用phpunit在Laravel8中创建单元测试,我有一个控制器,它使用外部API为使用Guzzle HTTP客户端的函数获取数据

我将调用guzzle的方法放在
Controller.php
中,这样就可以通过扩展这个类在任何其他控制器中访问它

class Controller extends BaseController
{
    protected function getAPI($url, $params = [])
    {
        $test_api = new Client();
        $headers = [
             'form_params' => $params,
             'http_errors' => false
        ];
            
        $response = $test_api->get($url, $headers);

        // More stuff to get the response...
    }
}
在其他控制器上,我调用了该方法来执行API调用

class OtherController extends Controller
{
     public function someMethod()
     {
          $response = $this->getAPI('/get_data', [], 'get');

          // More stuffs...
     }
}
我正在创建的单元测试是针对
someMethod()
的,我不知道如何在这个控制器内模拟已在其他控制器上扩展的API调用


我想要的是模拟API调用,所以我不需要实际“调用”API。我查看了guzzle关于测试()的文档,但对于如何在我的场景中实现这一点没有任何意义。

我最终使用假类来模拟API调用。这是该解决方案的有用链接: