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
630
「ソフトウェア設計」のドメイン - 「データモデリングでドメインを駆動する」を読んで
hidenorigoto
10
2.7k
メルカリ バックエンド領域のこれまでとこれから
hidenorigoto
1
400
メルカリのエンジニアリング組織の変化〜Engineering Managerの視点から〜
hidenorigoto
0
8k
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.9k
抽象化って何? (What is abstraction?)
hidenorigoto
9
4.4k
抽象化って何? (What is abstraction?)
hidenorigoto
11
6.4k
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜
hidenorigoto
14
5.8k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
268
27k
Building Better People: How to give real-time feedback that sticks.
wjessup
363
19k
A better future with KSS
kneath
238
17k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
800
Rebuilding a faster, lazier Slack
samanthasiow
79
8.6k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
320
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
4 Signs Your Business is Dying
shpigford
180
21k
A Modern Web Designer's Workflow
chriscoyier
693
190k
The Pragmatic Product Professional
lauravandoore
31
6.3k
A designer walks into a library…
pauljervisheath
202
24k
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༵