Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mockeryを読んでみたよ

chiroruxx
January 18, 2023

 Mockeryを読んでみたよ

第148回 PHP勉強会@東京のLTで使用したスライドです。

chiroruxx

January 18, 2023
Tweet

More Decks by chiroruxx

Other Decks in Technology

Transcript

  1. > whoami ▪ 名前: ちひろ/ちろ/前⽥ ▪ Twitter: @chiroruxxxx ▪ 所属:

    東京都⽴産業技術⼤学院⼤学 産業技術専攻 情報アーキテクチャコース 追川PBL ▪ テーマ: スクラムの理論と実践
  2. サンプルコード $user = Mockery::mock(User::class); $user->shouldReceive('getFullName') ->andReturn('テスト太郎'); $decorator = new Decorator();

    $this->assertSame( '** テスト太郎 **', $decorator->decorate($user) ); モックしたクラスは Userクラス︖
  3. サンプルコード $user = Mockery::mock(User::class); $user->shouldReceive('getFullName') ->andReturn('テスト太郎'); $decorator = new Decorator();

    $this->assertSame( '** テスト太郎 **', $decorator->decorate($user) ); モックしたクラスは Userクラス︖ コンストラクタで 引数が必要だけど︖
  4. サンプルコード $user = Mockery::mock(User::class); $user->shouldReceive('getFullName') ->andReturn('テスト太郎'); $decorator = new Decorator();

    $this->assertSame( '** テスト太郎 **', $decorator->decorate($user) ); モックしたクラスは Userクラス︖ コンストラクタで 引数が必要だけど︖ こんなメソッド ないけど︖
  5. クラス定義の読み込み $code = ' <?php class Mock implements MockInterface {

    // ... public function shouldReceive(...$methodNames) { // ... ';
  6. クラス定義の読み込み $code = ' <?php class Mock implements MockInterface {

    // ... public function shouldReceive(...$methodNames) { // ... '; 💡 モックでメソッドが使える
  7. クラスの継承 $code = ' <?php class Mock extends ¥App¥Models¥User implements

    MockInterface { // ... public function shouldReceive(...$methodNames) { // ... '; 💡 User 型として扱える
  8. まとめ ▪ モックしたクラスは User クラス? – User クラスを継承しているのでUser型として扱える ▪ shouldRecieve

    なんてメソッドは User クラスにないけど? – User クラスを継承した先で定義しているので使える ▪ コンストラクタで引数が必要だけど? – リフレクションを使ってコンストラクタ無しで⽣成してる