Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
PHPカンファレンス関西LT.pdf
Search
hidenorigoto
May 12, 2012
2.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHPカンファレンス関西LT.pdf
hidenorigoto
May 12, 2012
More Decks by hidenorigoto
See All by hidenorigoto
ドメインと向き合う - 旅行予約編
hidenorigoto
4
1.2k
「ソフトウェア設計」のドメイン - 「データモデリングでドメインを駆動する」を読んで
hidenorigoto
10
3.5k
メルカリ バックエンド領域のこれまでとこれから
hidenorigoto
1
630
メルカリのエンジニアリング組織の変化〜Engineering Managerの視点から〜
hidenorigoto
0
8.8k
The changes of the engineering organization in Mercari - from the view of an engineering manager -
hidenorigoto
0
350
PHPerKaigi 2019 ランチセッション (3/31)
hidenorigoto
1
4.5k
抽象化って何? (What is abstraction?)
hidenorigoto
9
4.9k
抽象化って何? (What is abstraction?)
hidenorigoto
11
7.8k
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜
hidenorigoto
14
6.4k
Featured
See All Featured
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
300
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
570
Odyssey Design
rkendrick25
PRO
2
810
Test your architecture with Archunit
thirion
2
2.4k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
540
Why Our Code Smells
bkeepers
PRO
340
58k
For a Future-Friendly Web
brad_frost
183
10k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Making the Leap to Tech Lead
cromwellryan
135
10k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
200
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
520
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
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༵