Successfully reported this slideshow.
Your SlideShare is downloading. ×

20120327 phpstudy58-phake

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

20120327 phpstudy58-phake

  1. 1. Phakeで簡単 モックオブジェクト作成 Katsuhiro OGAWA @fivestr 2012.03.27 - PHP勉強会@東京 #58
  2. 2. 2 About Me 小川 雄大 - OGAWA Katsuhiro @fivestr 株式会社クロコス 会社では高橋って呼ばれてます パーフェクトPHP書きました 5月にもPHPの本出すみたいです (色々未定) OOP、MVC、DDD
  3. 3. 3 Agenda スタブとモック Phakeとは Phake API Phakeのインストール
  4. 4. 4 テストが遅い? DBやIO、Web APIなどへのアクセスを伴う処理のテス トってどうしてますか? DBアクセスしてたらテストが遅くなったりするし、Web APIだとネットワークにつながってないとテストできない ですよね そんなときはスタブの出番です
  5. 5. 5 スタブとは 前述のような外部の何かへのアクセスの代わりに定数を 返すようにしたものがスタブ stub out - もみ消す 従来:  return $webservice->api($id); スタブ: return [‘id’ => ‘1’, ‘name’ => ‘takahashi’]; 定数に置き換える
  6. 6. 6 サンプル Facebookクラスは Facebookが提供する PHP SDK。 api()メソッドでAPIへ アクセス Clientクラスは Facebookオブジェク トを使ってデータアク セス
  7. 7. 7 スタブで差し替え Facebookクラスの api()メソッドを上書き して定数を返すように すれば、Web APIへの アクセスをなくせる 上位モジュール 下位モジュール
  8. 8. 8 スタブの活用 スタブを使うと、DBやWeb APIといった、外部の何かへ の依存を切り離すことが可能 外部の何かへのアクセスができない状態でも、アクセス 処理をスタブに置き換えることで上位モジュールのテス トが可能
  9. 9. 9 モックオブジェクトとは モックオブジェクトはスタブの一種 スタブが何らかの動作の代用品でしかないのに対して、 モックオブジェクトは上位モジュールが下位モジュール を正しく使用しているかをテストするためのもの
  10. 10. 10 モックオブジェクトの活用 DBに保存するような戻り値を伴わないメソッドをスタブ 化したいときは、戻り値が何であるかではなく、メソッ ド自体が呼び出されていることを確認する
  11. 11. 11 モックオブジェクトの作り方 単なるスタブと違って、モックオブジェクトはメソッド が呼び出されたことをテストしなければならない モックオブジェクトフレームワークを使ってモックオブ ジェクトを作成するのが一般的 代表的なものがPHPUnit標準のPHPUnit_MockObject 今回紹介するPhakeもフレームワークの1つ
  12. 12. 12 Phake 直感的に使えるモックオブジェクトフレームワーク JavaのMockitoがベース PHPUnitにも対応
  13. 13. 13 ; PHPUnit_MockObject
  14. 14. 14 ; Phake
  15. 15. 15 Phake Phake::mock モックオブジェクトの作成 Phake::when スタブメソッドの作成 Phake::verify メソッドが正しく呼び出されたか
  16. 16. 16 Phake::mock Phake::mock( $classname [, $arg1[, $... ]] ) 指定したクラス名を元にモックオブジェクトを作成 第2引数以降がコンストラクタの引数
  17. 17. 17 Phake::when Phake::when( $mock ) ->スタブ化したいメソッド(期待する引数) ->呼び出されたらどうなるか() スタブ化したいメソッドと引数をそのまま記述 Phake::when($mock)->foo(Phake::anyParameters()) foo()メソッドが引数問わず呼び出される
  18. 18. 18 Phake::when - Answers thenReturn( $value ) $value を返す thenThrow( $exception ) $exception をスロー thenCallParent() parent呼び出し
  19. 19. 19 Phake::verify Phake::verify( $mock [, $mode ] ) ->検証するメソッド(期待する引数) Phake::verify($mock, Phake::times($n))->foo() foo()メソッドが$n回呼び出されたことを検証 Phake::verifyNoIntaraction($mock) $mockオブジェクトのスタブメソッドが何も呼び出さ れなかったことを検証
  20. 20. 20 Partial Mocks 通常 Phake::mock() でモックオブジェクトを作成する と、すべてのメソッドがスタブ化される 一部のメソッドのみスタブ化したい場合はパーシャル モックとして作成する パーシャルモックオブジェクトは基本的にはメソッドが そのまま呼び出されるが、Phake::when()で部分的にスタ ブメソッドに置き換えることが可能
  21. 21. 21
  22. 22. 22
  23. 23. 23 Partial Mocks パーシャルモックが必要になるようであれば、部分的設 計を見直すいい機会かも パーシャルモックでスタブ化した部分を別のクラスとし て抽出して、モックオブジェクトで置き換える方がたぶ ん素直でわかりやすいと思います
  24. 24. 24 Installation pear config-set auto_discover 1 pear install pear.digitalsandwich.com/phake include_pathを設定してPhake.phpを読み込むだけ
  25. 25. 25 まとめ Phakeを使うと直感的にモックオブジェクトを作れる 思考の流れに沿ってスムーズにモックオブジェクトが 作れるためテストが る PHPUnitのMockObjectで十分なら無理に使わなくていい んじゃないですかね……
  26. 26. 26 Links http://phake.digitalsandwich.com/ https://github.com/mlively/Phake http://fivestar.hatenablog.com/ ご清聴ありがとうございました

×