Laravelの活用にはサービスコンテナの理解が最も大事 ==== どんなクラスでもモックしやすくなる。 ### AppServiceProvider ```php use Twilio\Rest\Client; class AppServiceProvider extends ServiceProvider { public function register(): void { $this->app->bind(Client::class, function ($app) { return new Client('', ''); }); } ``` ## Controller ```php use Twilio\Rest\Client; $twilio = app(Client::class); $message = $twilio->messages->create() // ``` ## Test ```php use Mockery; use Mockery\MockInterface; use Twilio\Rest\Api\V2010\Account\MessageInstance; use Twilio\Rest\Client; use Twilio\Rest\Api\V2010\Account\MessageList; public function test_twilio(): void { $this->mock(Client::class, function (MockInterface $mock) { $message = Mockery::mock(MessageInstance::class); $message->sid = 0; $messages = Mockery::mock(MessageList::class); $messages->shouldReceive('create')->andReturn($message); $mock->messages = $messages; }); $response = $this->get('/twilio'); $response->assertOk(); } ``` とはいえこの質問の例だと`$twilio->messages`で呼び出してるのでモックしにくい。 古い時代のコードだったりOpenAPIで自動生成しただけのコードはプロパティを使ってることが多い。 Laravel用パッケージを作る時はユーザーのテストしやすさまで考えてメソッドで呼び出す`$twilio->messages()->create()`の形にしたほうがいい。 https://stackoverflow.com/questions/78889243/how-to-mock-the-twilio-library-in-laravel/78890240