Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPカンファレンス関西LT.pdf
Search
hidenorigoto
May 12, 2012
0
2.4k
PHPカンファレンス関西LT.pdf
hidenorigoto
May 12, 2012
Tweet
Share
More Decks by hidenorigoto
See All by hidenorigoto
ドメインと向き合う - 旅行予約編
hidenorigoto
4
1.1k
「ソフトウェア設計」のドメイン - 「データモデリングでドメインを駆動する」を読んで
hidenorigoto
10
3.3k
メルカリ バックエンド領域のこれまでとこれから
hidenorigoto
1
570
メルカリのエンジニアリング組織の変化〜Engineering Managerの視点から〜
hidenorigoto
0
8.5k
The changes of the engineering organization in Mercari - from the view of an engineering manager -
hidenorigoto
0
330
PHPerKaigi 2019 ランチセッション (3/31)
hidenorigoto
1
4.3k
抽象化って何? (What is abstraction?)
hidenorigoto
9
4.7k
抽象化って何? (What is abstraction?)
hidenorigoto
11
7.3k
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜
hidenorigoto
14
6.3k
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
2
3.8k
Google's AI Overviews - The New Search
badams
0
870
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Being A Developer After 40
akosma
91
590k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
32
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.4k
Designing Powerful Visuals for Engaging Learning
tmiket
0
190
Faster Mobile Websites
deanohume
310
31k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Navigating Team Friction
lara
191
16k
Transcript
モックの使い所 PHPメンターズ 後藤 秀宣(ごとう ひでのり) @hidenorigoto 1 1 125݄12༵
自己紹介 2 2 125݄12༵
自己紹介 • 後藤 秀宣(ごとう ひでのり) 2 2 125݄12༵
自己紹介 • 後藤 秀宣(ごとう ひでのり) • @hidenorigoto 2 2 125݄12༵
自己紹介 • 後藤 秀宣(ごとう ひでのり) • @hidenorigoto • インクス株式会社/PHPメンターズ (KnpLabs
Japanメンバー) 2 2 125݄12༵
自己紹介 • 後藤 秀宣(ごとう ひでのり) • @hidenorigoto • インクス株式会社/PHPメンターズ (KnpLabs
Japanメンバー) • PHPは10年くらい利用 2 2 125݄12༵
自己紹介 • 後藤 秀宣(ごとう ひでのり) • @hidenorigoto • インクス株式会社/PHPメンターズ (KnpLabs
Japanメンバー) • PHPは10年くらい利用 • 日本Symfonyユーザー会 2 2 125݄12༵
自己紹介 • 後藤 秀宣(ごとう ひでのり) • @hidenorigoto • インクス株式会社/PHPメンターズ (KnpLabs
Japanメンバー) • PHPは10年くらい利用 • 日本Symfonyユーザー会 • symfony 1.4の本 2 2 125݄12༵
モックオブジェクト 3 3 125݄12༵
モックオブジェクト • テストで使うもの 3 3 125݄12༵
モックオブジェクト • テストで使うもの • モックオブジェクト使っていますか? 3 3 125݄12༵
モックオブジェクト • テストで使うもの • モックオブジェクト使っていますか? • モックオブジェクトって必要なの? 3 3 125݄12༵
モックオブジェクト • テストで使うもの • モックオブジェクト使っていますか? • モックオブジェクトって必要なの? • 実際のテストコードで、使い所を見てみ よう!
3 3 125݄12༵
注文 4 注文NO 2203498772 メール
[email protected]
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 125݄12༵
注文の合計金額 • 注文の合計金額 = 各明細の金額の合計 + 諸費用 • 明細ごとの計算ルールは明細クラスに任 せる 5 5 125݄12༵
注文の合計金額 • 注文の合計金額 = 各明細の金額の合計 + 諸費用 • 明細ごとの計算ルールは明細クラスに任 せる 5 5 125݄12༵
注文の合計金額 • 注文の合計金額 = 各明細の金額の合計 + 諸費用 • 明細ごとの計算ルールは明細クラスに任 せる 5 5 125݄12༵
注文の合計金額 • 注文の合計金額 = 各明細の金額の合計 + 諸費用 • 明細ごとの計算ルールは明細クラスに任 せる 5 このメソッドのテスト 5
125݄12༵
書いてみよう 6 6 125݄12༵
書いてみよう 6 合計を計算するには明細 のデータも必要だ なぁ・・ 6 125݄12༵
7 7 125݄12༵
7 7 125݄12༵
8 8 125݄12༵
8 8 125݄12༵
9 9 125݄12༵
9 こんなメソッドが必要だ なぁ・・・ 9 125݄12༵
9 こんなメソッドが必要だ なぁ・・・ 後から実装しようか? 先にやろうか? 9 125݄12༵
10 10 125݄12༵
10 テスト用やで 2個くらいはいるやろ 10 125݄12༵
11 テストが書けた PHPUnit 実行!!! 11 125݄12༵
12 12 125݄12༵
13 今何のテストしてた? 13 125݄12༵
13 今何のテストしてた? • Orderクラスのcalculate() 13 125݄12༵
13 今何のテストしてた? • Orderクラスのcalculate() • OrderDetailのcalculate()を実装しない とダメ? 13 125݄12༵
13 今何のテストしてた? • Orderクラスのcalculate() • OrderDetailのcalculate()を実装しない とダメ? • OrderのaddDetail()を実装しないとダ メ?
13 125݄12༵
13 今何のテストしてた? • Orderクラスのcalculate() • OrderDetailのcalculate()を実装しない とダメ? • OrderのaddDetail()を実装しないとダ メ?
• そもそも1つのテストメソッドで、いろい ろな実装に依存しすぎ 13 125݄12༵
13 今何のテストしてた? • Orderクラスのcalculate() • OrderDetailのcalculate()を実装しない とダメ? • OrderのaddDetail()を実装しないとダ メ?
• そもそも1つのテストメソッドで、いろい ろな実装に依存しすぎ 構造は必要なので、 これだけは先に実装 しておく 13 125݄12༵
モックを使う 14 14 125݄12༵
モックを使う • 今のテストで関心のあるのは、Orderクラ スのcalculate() 14 14 125݄12༵
モックを使う • 今のテストで関心のあるのは、Orderクラ スのcalculate() • OrderDetailクラスのcalculate()が正し く実装されているかどうかには関心がな い 14 14
125݄12༵
モックを使う • 今のテストで関心のあるのは、Orderクラ スのcalculate() • OrderDetailクラスのcalculate()が正し く実装されているかどうかには関心がな い • OrderDetailクラスの中身には関心がな
い 14 14 125݄12༵
モックを使う • 今のテストで関心のあるのは、Orderクラ スのcalculate() • OrderDetailクラスのcalculate()が正し く実装されているかどうかには関心がな い • OrderDetailクラスの中身には関心がな
い • 別のテストで 14 14 125݄12༵
モックを使う 15 15 125݄12༵
モックを使う • OrderDetailは、実クラスをインスタンス 化するのではなく、モックで置き換える 15 15 125݄12༵
モックを使う • OrderDetailは、実クラスをインスタンス 化するのではなく、モックで置き換える 15 15 125݄12༵
モックを使う • OrderDetailは、実クラスをインスタンス 化するのではなく、モックで置き換える 15 Phake - PHP Mocking Framework
http://phake.digitalsandwich.com/docs/html/ index.html 15 125݄12༵
16 16 125݄12༵
16 モックオブジェクトの 準備 16 125݄12༵
16 モックオブジェクトの 振舞を設定 16 125݄12༵
16 モックオブジェクトへ インタラクションをチェック 16 125݄12༵
17 テストが書けた PHPUnit 実行!!! 17 125݄12༵
18 18 125݄12༵
18 ϞοΫΦϒδΣΫτͬͯ 18 125݄12༵
18 ϞοΫΦϒδΣΫτͬͯ ͳΜ͔ͩͱͬͯ 18 125݄12༵
18 ϞοΫΦϒδΣΫτͬͯ ͳΜ͔ͩͱͬͯ ͋Γ͕ͯ͐͡ΌͶ͔͐ɾɾ 18 125݄12༵
19 うまく使うには 19 125݄12༵
19 うまく使うには • ユニットテストでテ ストしようとしてい る対象を明確にする 19 125݄12༵
19 うまく使うには • ユニットテストでテ ストしようとしてい る対象を明確にする • 関心事の分離 19 125݄12༵
19 うまく使うには • ユニットテストでテ ストしようとしてい る対象を明確にする • 関心事の分離 • 状態のテストではな
く、相互作用をテス トする 19 125݄12༵
19 うまく使うには • ユニットテストでテ ストしようとしてい る対象を明確にする • 関心事の分離 • 状態のテストではな
く、相互作用をテス トする 19 125݄12༵
19 うまく使うには • ユニットテストでテ ストしようとしてい る対象を明確にする • 関心事の分離 • 状態のテストではな
く、相互作用をテス トする 19 125݄12༵
19 うまく使うには • ユニットテストでテ ストしようとしてい る対象を明確にする • 関心事の分離 • 状態のテストではな
く、相互作用をテス トする 19 125݄12༵
GitHubにあげてあります 20 https://github.com/hidenorigoto/ phpkansai2012mockobject 20 125݄12༵
参考書籍 • Growing Object- Oriented Software, Guided by Tests 21
21 125݄12༵
ありがとうございまし た!!!! 22 22 125݄12༵
時間が余った?(1) • WEB+DB PRESSのPHP連載が始まります • 第1回 Behatの話 23 23 125݄12༵
時間が余った?(2) 24 • PHPのモッキングフレームワークの種類 • PHPUnit • Mockery • Phake
24 125݄12༵
時間が余った?(2) 24 • PHPのモッキングフレームワークの種類 • PHPUnit • Mockery • Phake
インテンショナリティの 高いテストコード 24 125݄12༵
時間が余った?(3) • PHPUnitのテスト コードをPhakeで書 き換える • Phakeの使い方の 例 • インテンショナリ
ティが高くなる例 25 phpmentors.jp 25 125݄12༵
時間が余った?(4) • Symfonyのトレーニ ングサービスやサ ポートサービスを やっています。 26 phpmentors.jp 26 125݄12༵