前提・実現したいこと
Laravel5.7で開発しています。
外部のAPIを叩いてデータを取得する処理を実装しており、自動テストを行いたいのですが、
当然自動テストで何度もリクエストするのは禁止されているため、Mockeryを使用してAPIをモック化しようと思っています。
ところが、自動テストを実装した経験があまりないため、うまくモック化できておらず困っています。
自動テストはPHPUnitで行っています。
該当のソースコード
APIを直接モック化できるのでしょうか?
それとも、APIを実行する処理をラップした関数をモック化するのでしょうか?
以下、APIを直接モック化しようとしたコードです。(assertは省いております)
外部API\Hogehoge\Fugafuga
のcreate
を実行したとき、必ずid
にabc
が入ることを想定したものです。
外部APIは、HogeController
内でnewするわけではないので、モック化は不可能でしょうか?
もし不可能である場合、ラップした関数をモック化する方法を教えていただけるとありがたいです。
php
1use Hogehoge; 2class HogeController extends Controller 3{ 4 /** 5 * APIの例 6 */ 7 public function create($arg) 8 { 9 return \Hogehoge\Fugafuga::create($arg); 10 } 11}
php
1 /** 2 * UnitTest 3 * @test 4 */ 5 public function testCreate() 6 { 7 $mock = Mockery::mock('Hogehoge\Fugafuga'); 8 $mock->shouldReceive('create') 9 ->with(str_random(16)) 10 ->andReturn(['id' => 'abc']); 11 $this->instance('Hogehoge\Fugafuga', $mock); 12 13 $controller = new HogeController(); 14 $actual = $controller->create(); 15 16 $this->assert(...) 17 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。