PHPカンファレンス関西LT.pdf

Ba8ecb9f1d269e44056ff4e7dca4c5e0?s=47 hidenorigoto
May 12, 2012
2.2k

 PHPカンファレンス関西LT.pdf

Ba8ecb9f1d269e44056ff4e7dca4c5e0?s=128

hidenorigoto

May 12, 2012
Tweet

Transcript

  1. モックの使い所 PHPメンターズ 後藤 秀宣(ごとう ひでのり) @hidenorigoto 1 1 12೥5݄12೔౔༵೔

  2. 自己紹介 2 2 12೥5݄12೔౔༵೔

  3. 自己紹介 • 後藤 秀宣(ごとう ひでのり) 2 2 12೥5݄12೔౔༵೔

  4. 自己紹介 • 後藤 秀宣(ごとう ひでのり) • @hidenorigoto 2 2 12೥5݄12೔౔༵೔

  5. 自己紹介 • 後藤 秀宣(ごとう ひでのり) • @hidenorigoto • インクス株式会社/PHPメンターズ (KnpLabs

    Japanメンバー) 2 2 12೥5݄12೔౔༵೔
  6. 自己紹介 • 後藤 秀宣(ごとう ひでのり) • @hidenorigoto • インクス株式会社/PHPメンターズ (KnpLabs

    Japanメンバー) • PHPは10年くらい利用 2 2 12೥5݄12೔౔༵೔
  7. 自己紹介 • 後藤 秀宣(ごとう ひでのり) • @hidenorigoto • インクス株式会社/PHPメンターズ (KnpLabs

    Japanメンバー) • PHPは10年くらい利用 • 日本Symfonyユーザー会 2 2 12೥5݄12೔౔༵೔
  8. 自己紹介 • 後藤 秀宣(ごとう ひでのり) • @hidenorigoto • インクス株式会社/PHPメンターズ (KnpLabs

    Japanメンバー) • PHPは10年くらい利用 • 日本Symfonyユーザー会 • symfony 1.4の本 2 2 12೥5݄12೔౔༵೔
  9. モックオブジェクト 3 3 12೥5݄12೔౔༵೔

  10. モックオブジェクト • テストで使うもの 3 3 12೥5݄12೔౔༵೔

  11. モックオブジェクト • テストで使うもの • モックオブジェクト使っていますか? 3 3 12೥5݄12೔౔༵೔

  12. モックオブジェクト • テストで使うもの • モックオブジェクト使っていますか? • モックオブジェクトって必要なの? 3 3 12೥5݄12೔౔༵೔

  13. モックオブジェクト • テストで使うもの • モックオブジェクト使っていますか? • モックオブジェクトって必要なの? • 実際のテストコードで、使い所を見てみ よう!

    3 3 12೥5݄12೔౔༵೔
  14. 注文 4 注文NO 2203498772 メール hidenorigoto@gmail.com NO 商品名 単価 数量

    小計 1 Blue Bull 200 100 20,000- 2 Green Bull 180 50 9,000- 3 Orange Bull 230 80 18,400- 合計 合計 合計 合計 47,400- 注文伝票 注文明細 4 12೥5݄12೔౔༵೔
  15. 注文の合計金額 • 注文の合計金額 =  各明細の金額の合計 + 諸費用 • 明細ごとの計算ルールは明細クラスに任 せる 5 5 12೥5݄12೔౔༵೔

  16. 注文の合計金額 • 注文の合計金額 =  各明細の金額の合計 + 諸費用 • 明細ごとの計算ルールは明細クラスに任 せる 5 5 12೥5݄12೔౔༵೔

  17. 注文の合計金額 • 注文の合計金額 =  各明細の金額の合計 + 諸費用 • 明細ごとの計算ルールは明細クラスに任 せる 5 5 12೥5݄12೔౔༵೔

  18. 注文の合計金額 • 注文の合計金額 =  各明細の金額の合計 + 諸費用 • 明細ごとの計算ルールは明細クラスに任 せる 5 このメソッドのテスト 5

    12೥5݄12೔౔༵೔
  19. 書いてみよう 6 6 12೥5݄12೔౔༵೔

  20. 書いてみよう 6 合計を計算するには明細 のデータも必要だ なぁ・・ 6 12೥5݄12೔౔༵೔

  21. 7 7 12೥5݄12೔౔༵೔

  22. 7 7 12೥5݄12೔౔༵೔

  23. 8 8 12೥5݄12೔౔༵೔

  24. 8 8 12೥5݄12೔౔༵೔

  25. 9 9 12೥5݄12೔౔༵೔

  26. 9 こんなメソッドが必要だ なぁ・・・ 9 12೥5݄12೔౔༵೔

  27. 9 こんなメソッドが必要だ なぁ・・・ 後から実装しようか? 先にやろうか? 9 12೥5݄12೔౔༵೔

  28. 10 10 12೥5݄12೔౔༵೔

  29. 10 テスト用やで 2個くらいはいるやろ 10 12೥5݄12೔౔༵೔

  30. 11 テストが書けた PHPUnit 実行!!! 11 12೥5݄12೔౔༵೔

  31. 12 12 12೥5݄12೔౔༵೔

  32. 13 今何のテストしてた? 13 12೥5݄12೔౔༵೔

  33. 13 今何のテストしてた? • Orderクラスのcalculate() 13 12೥5݄12೔౔༵೔

  34. 13 今何のテストしてた? • Orderクラスのcalculate() • OrderDetailのcalculate()を実装しない とダメ? 13 12೥5݄12೔౔༵೔

  35. 13 今何のテストしてた? • Orderクラスのcalculate() • OrderDetailのcalculate()を実装しない とダメ? • OrderのaddDetail()を実装しないとダ メ?

    13 12೥5݄12೔౔༵೔
  36. 13 今何のテストしてた? • Orderクラスのcalculate() • OrderDetailのcalculate()を実装しない とダメ? • OrderのaddDetail()を実装しないとダ メ?

    • そもそも1つのテストメソッドで、いろい ろな実装に依存しすぎ 13 12೥5݄12೔౔༵೔
  37. 13 今何のテストしてた? • Orderクラスのcalculate() • OrderDetailのcalculate()を実装しない とダメ? • OrderのaddDetail()を実装しないとダ メ?

    • そもそも1つのテストメソッドで、いろい ろな実装に依存しすぎ 構造は必要なので、 これだけは先に実装 しておく 13 12೥5݄12೔౔༵೔
  38. モックを使う 14 14 12೥5݄12೔౔༵೔

  39. モックを使う • 今のテストで関心のあるのは、Orderクラ スのcalculate() 14 14 12೥5݄12೔౔༵೔

  40. モックを使う • 今のテストで関心のあるのは、Orderクラ スのcalculate() • OrderDetailクラスのcalculate()が正し く実装されているかどうかには関心がな い 14 14

    12೥5݄12೔౔༵೔
  41. モックを使う • 今のテストで関心のあるのは、Orderクラ スのcalculate() • OrderDetailクラスのcalculate()が正し く実装されているかどうかには関心がな い • OrderDetailクラスの中身には関心がな

    い 14 14 12೥5݄12೔౔༵೔
  42. モックを使う • 今のテストで関心のあるのは、Orderクラ スのcalculate() • OrderDetailクラスのcalculate()が正し く実装されているかどうかには関心がな い • OrderDetailクラスの中身には関心がな

    い • 別のテストで 14 14 12೥5݄12೔౔༵೔
  43. モックを使う 15 15 12೥5݄12೔౔༵೔

  44. モックを使う • OrderDetailは、実クラスをインスタンス 化するのではなく、モックで置き換える 15 15 12೥5݄12೔౔༵೔

  45. モックを使う • OrderDetailは、実クラスをインスタンス 化するのではなく、モックで置き換える 15 15 12೥5݄12೔౔༵೔

  46. モックを使う • OrderDetailは、実クラスをインスタンス 化するのではなく、モックで置き換える 15 Phake - PHP Mocking Framework

    http://phake.digitalsandwich.com/docs/html/ index.html 15 12೥5݄12೔౔༵೔
  47. 16 16 12೥5݄12೔౔༵೔

  48. 16 モックオブジェクトの 準備 16 12೥5݄12೔౔༵೔

  49. 16 モックオブジェクトの 振舞を設定 16 12೥5݄12೔౔༵೔

  50. 16 モックオブジェクトへ インタラクションをチェック 16 12೥5݄12೔౔༵೔

  51. 17 テストが書けた PHPUnit 実行!!! 17 12೥5݄12೔౔༵೔

  52. 18 18 12೥5݄12೔౔༵೔

  53. 18 ϞοΫΦϒδΣΫτͬͯ 18 12೥5݄12೔౔༵೔

  54. 18 ϞοΫΦϒδΣΫτͬͯ ͳΜ͔ͩͱͬͯ΋ 18 12೥5݄12೔౔༵೔

  55. 18 ϞοΫΦϒδΣΫτͬͯ ͳΜ͔ͩͱͬͯ΋ ͋Γ͕ͯ͐͡ΌͶ͔͐ɾɾ 18 12೥5݄12೔౔༵೔

  56. 19 うまく使うには 19 12೥5݄12೔౔༵೔

  57. 19 うまく使うには • ユニットテストでテ ストしようとしてい る対象を明確にする 19 12೥5݄12೔౔༵೔

  58. 19 うまく使うには • ユニットテストでテ ストしようとしてい る対象を明確にする • 関心事の分離 19 12೥5݄12೔౔༵೔

  59. 19 うまく使うには • ユニットテストでテ ストしようとしてい る対象を明確にする • 関心事の分離 • 状態のテストではな

    く、相互作用をテス トする 19 12೥5݄12೔౔༵೔
  60. 19 うまく使うには • ユニットテストでテ ストしようとしてい る対象を明確にする • 関心事の分離 • 状態のテストではな

    く、相互作用をテス トする 19 12೥5݄12೔౔༵೔
  61. 19 うまく使うには • ユニットテストでテ ストしようとしてい る対象を明確にする • 関心事の分離 • 状態のテストではな

    く、相互作用をテス トする 19 12೥5݄12೔౔༵೔
  62. 19 うまく使うには • ユニットテストでテ ストしようとしてい る対象を明確にする • 関心事の分離 • 状態のテストではな

    く、相互作用をテス トする 19 12೥5݄12೔౔༵೔
  63. GitHubにあげてあります 20 https://github.com/hidenorigoto/ phpkansai2012mockobject 20 12೥5݄12೔౔༵೔

  64. 参考書籍 • Growing Object- Oriented Software, Guided by Tests 21

    21 12೥5݄12೔౔༵೔
  65. ありがとうございまし た!!!! 22 22 12೥5݄12೔౔༵೔

  66. 時間が余った?(1) • WEB+DB PRESSのPHP連載が始まります • 第1回 Behatの話 23 23 12೥5݄12೔౔༵೔

  67. 時間が余った?(2) 24 • PHPのモッキングフレームワークの種類 • PHPUnit • Mockery • Phake

    24 12೥5݄12೔౔༵೔
  68. 時間が余った?(2) 24 • PHPのモッキングフレームワークの種類 • PHPUnit • Mockery • Phake

    インテンショナリティの 高いテストコード 24 12೥5݄12೔౔༵೔
  69. 時間が余った?(3) • PHPUnitのテスト コードをPhakeで書 き換える • Phakeの使い方の 例 • インテンショナリ

    ティが高くなる例 25 phpmentors.jp 25 12೥5݄12೔౔༵೔
  70. 時間が余った?(4) • Symfonyのトレーニ ングサービスやサ ポートサービスを やっています。 26 phpmentors.jp 26 12೥5݄12೔౔༵೔