Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

モックオブジェクト 3 3 12೥5݄12೔౔༵೔

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

モックオブジェクト • テストで使うもの • モックオブジェクト使っていますか? • モックオブジェクトって必要なの? • 実際のテストコードで、使い所を見てみ よう! 3 3 12೥5݄12೔౔༵೔

Slide 14

Slide 14 text

注文 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೔౔༵೔

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

7 7 12೥5݄12೔౔༵೔

Slide 22

Slide 22 text

7 7 12೥5݄12೔౔༵೔

Slide 23

Slide 23 text

8 8 12೥5݄12೔౔༵೔

Slide 24

Slide 24 text

8 8 12೥5݄12೔౔༵೔

Slide 25

Slide 25 text

9 9 12೥5݄12೔౔༵೔

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

10 10 12೥5݄12೔౔༵೔

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

12 12 12೥5݄12೔౔༵೔

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

13 今何のテストしてた? • Orderクラスのcalculate() • OrderDetailのcalculate()を実装しない とダメ? • OrderのaddDetail()を実装しないとダ メ? • そもそも1つのテストメソッドで、いろい ろな実装に依存しすぎ 構造は必要なので、 これだけは先に実装 しておく 13 12೥5݄12೔౔༵೔

Slide 38

Slide 38 text

モックを使う 14 14 12೥5݄12೔౔༵೔

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

モックを使う 15 15 12೥5݄12೔౔༵೔

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

モックを使う • OrderDetailは、実クラスをインスタンス 化するのではなく、モックで置き換える 15 Phake - PHP Mocking Framework http://phake.digitalsandwich.com/docs/html/ index.html 15 12೥5݄12೔౔༵೔

Slide 47

Slide 47 text

16 16 12೥5݄12೔౔༵೔

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

18 18 12೥5݄12೔౔༵೔

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

GitHubにあげてあります 20 https://github.com/hidenorigoto/ phpkansai2012mockobject 20 12೥5݄12೔౔༵೔

Slide 64

Slide 64 text

参考書籍 • Growing Object- Oriented Software, Guided by Tests 21 21 12೥5݄12೔౔༵೔

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

時間が余った?(2) 24 • PHPのモッキングフレームワークの種類 • PHPUnit • Mockery • Phake インテンショナリティの 高いテストコード 24 12೥5݄12೔౔༵೔

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

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