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
10
2.5k
メルカリ バックエンド領域のこれまでとこれから
hidenorigoto
1
390
メルカリのエンジニアリング組織の変化〜Engineering Managerの視点から〜
hidenorigoto
0
7.9k
The changes of the engineering organization in Mercari - from the view of an engineering manager -
hidenorigoto
0
240
PHPerKaigi 2019 ランチセッション (3/31)
hidenorigoto
1
3.8k
抽象化って何? (What is abstraction?)
hidenorigoto
9
4.3k
抽象化って何? (What is abstraction?)
hidenorigoto
11
6.2k
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜
hidenorigoto
14
5.7k
SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則編(拡大版)〜
hidenorigoto
9
5k
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
29
2.5k
The Art of Programming - Codeland 2020
erikaheidi
48
13k
Docker and Python
trallard
39
3k
Practical Orchestrator
shlominoach
185
10k
KATA
mclloyd
27
13k
Building Applications with DynamoDB
mza
89
5.9k
Embracing the Ebb and Flow
colly
83
4.4k
Web Components: a chance to create the future
zenorocha
308
41k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Git: the NoSQL Database
bkeepers
PRO
425
64k
Principles of Awesome APIs and How to Build Them.
keavy
125
16k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
33
1.7k
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༵