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.3k
PHPカンファレンス関西LT.pdf
hidenorigoto
May 12, 2012
Tweet
Share
More Decks by hidenorigoto
See All by hidenorigoto
メルカリ バックエンド領域のこれまでとこれから
hidenorigoto
1
320
メルカリのエンジニアリング組織の変化〜Engineering Managerの視点から〜
hidenorigoto
0
7.5k
The changes of the engineering organization in Mercari - from the view of an engineering manager -
hidenorigoto
0
230
PHPerKaigi 2019 ランチセッション (3/31)
hidenorigoto
1
3.6k
抽象化って何? (What is abstraction?)
hidenorigoto
9
4k
抽象化って何? (What is abstraction?)
hidenorigoto
11
5.2k
続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜
hidenorigoto
14
5.2k
SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則編(拡大版)〜
hidenorigoto
6
4.7k
SOLIDの原則ってどんなふうに使うの?
hidenorigoto
50
28k
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
185
15k
Adopting Sorbet at Scale
ufuk
66
8.5k
Bash Introduction
62gerente
604
210k
A Modern Web Designer's Workflow
chriscoyier
689
190k
Become a Pro
speakerdeck
PRO
8
4.2k
What's in a price? How to price your products and services
michaelherold
236
11k
Building Flexible Design Systems
yeseniaperezcruz
317
37k
Code Reviewing Like a Champion
maltzj
512
39k
Designing with Data
zakiwarfel
94
4.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
0
3.2k
Building Adaptive Systems
keathley
29
1.8k
The Cost Of JavaScript in 2023
addyosmani
13
3.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༵