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
Phakeで簡単 モックオブジェクト作成
Search
Katsuhiro Ogawa
July 02, 2012
Programming
3.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Phakeで簡単 モックオブジェクト作成
2012.03.27 PHP勉強会@東京 #58
Katsuhiro Ogawa
July 02, 2012
More Decks by Katsuhiro Ogawa
See All by Katsuhiro Ogawa
新規プロダクト開発に伴う既存マイクロサービスのリアーキテクティングとその後
fivestar
1
170
Goで学ぶSOLID原則
fivestar
0
460
メルカリ CSE チームの 歩みと取り組み / Steps and Tries in the CSE team for Mercari
fivestar
2
990
Go in Corporate Solutions Engineering
fivestar
0
2.7k
いつまでPHP 5.x使ってるの
fivestar
1
2.1k
PHP のドキュメントを読んで PHP のことをもっと知ろう
fivestar
1
3.5k
CrocosSecurityBundleを Symfony3.0に対応した話
fivestar
0
330
PHP BLT だけど HTML5 の コンテンツモデルのお話
fivestar
0
2.5k
THE NEW "PERFECT PHP" WILL BE COMING SOON
fivestar
0
8.2k
Other Decks in Programming
See All in Programming
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
3
1k
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
330
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
150
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
260
PyO3 で既存 Python 評価器を Rust core 化する ー wasm-bindgen でブラウザにも配るための設計
kdash
1
390
自分的「カンファレンスの楽しみ方」
syumai
0
190
MySQLとPostgreSQLって何が違うの?
akagami
PRO
0
160
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.4k
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
0
220
私のClaude Code活用法 (個人開発編) - PHPerKaigi mini #4(2026/08/24)
panda_program
1
210
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
570
Featured
See All Featured
ラッコキーワード サービス紹介資料
rakko
1
4.7M
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
Navigating Weather and Climate Data
rabernat
0
510
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
4
570
Exploring anti-patterns in Rails
aemeredith
3
490
Music & Morning Musume
bryan
47
7.4k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
300
How GitHub (no longer) Works
holman
316
150k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
670
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Transcript
PhakeͰ؆୯ ϞοΫΦϒδΣΫτ࡞ Katsuhiro OGAWA @fivestr 2012.03.27 - PHPษڧձ@౦ژ #58
About Me খ ༤େ - OGAWA Katsuhiro @fivestr גࣜձࣾΫϩίε ձࣾͰߴڮͬͯݺΕͯ·͢
ύʔϑΣΫτPHPॻ͖·ͨ͠ 5݄ʹPHPͷຊग़͢Έ͍ͨͰ͢ (৭ʑະఆ) OOPɺMVCɺDDD 2
Agenda ελϒͱϞοΫ Phakeͱ Phake API PhakeͷΠϯετʔϧ 3
ςετ͕͍ʁ DBIOɺWeb APIͳͲͷΞΫηεΛ͏ॲཧͷςε τͬͯͲ͏ͯ͠·͔͢ʁ DBΞΫηεͯͨ͠Βςετ͕͘ͳͬͨΓ͢Δ͠ɺWeb APIͩͱωοτϫʔΫʹͭͳ͕ͬͯͳ͍ͱςετͰ͖ͳ͍ Ͱ͢ΑͶ ͦΜͳͱ͖ελϒͷग़൪Ͱ͢ 4
ελϒͱ લड़ͷΑ͏ͳ֎෦ͷԿ͔ͷΞΫηεͷΘΓʹఆΛ ฦ͢Α͏ʹͨ͠ͷ͕ελϒ stub out - Έফ͢ ैདྷ:ɹɹreturn $webservice->api($id); ελϒ:ɹreturn
[‘id’ => ‘1’, ‘name’ => ‘takahashi’]; ఆʹஔ͖͑Δ 5
αϯϓϧ FacebookΫϥε Facebook͕ఏڙ͢Δ PHP SDKɻ api()ϝιουͰAPI ΞΫηε ClientΫϥε FacebookΦϒδΣΫ τΛͬͯσʔλΞΫ
ηε 6
ελϒͰࠩ͠ସ͑ FacebookΫϥεͷ api()ϝιουΛ্ॻ͖ ͯ͠ఆΛฦ͢Α͏ʹ ͢ΕɺWeb APIͷ ΞΫηεΛͳͤ͘Δ ্ҐϞδϡʔϧ ԼҐϞδϡʔϧ 7
ελϒͷ׆༻ ελϒΛ͏ͱɺDBWeb APIͱ͍ͬͨɺ֎෦ͷԿ͔ ͷґଘΛΓ͢͜ͱ͕Մೳ ֎෦ͷԿ͔ͷΞΫηε͕Ͱ͖ͳ͍ঢ়ଶͰɺΞΫηε ॲཧΛελϒʹஔ͖͑Δ͜ͱͰ্ҐϞδϡʔϧͷςε τ͕Մೳ 8
ϞοΫΦϒδΣΫτͱ ϞοΫΦϒδΣΫτελϒͷҰछ ελϒ͕ԿΒ͔ͷಈ࡞ͷ༻Ͱ͔͠ͳ͍ͷʹରͯ͠ɺ ϞοΫΦϒδΣΫτ্ҐϞδϡʔϧ͕ԼҐϞδϡʔϧ Λਖ਼͘͠༻͍ͯ͠Δ͔Λςετ͢ΔͨΊͷͷ 9
ϞοΫΦϒδΣΫτͷ׆༻ DBʹอଘ͢ΔΑ͏ͳΓΛΘͳ͍ϝιουΛελϒ Խ͍ͨ͠ͱ͖ɺΓ͕ԿͰ͋Δ͔Ͱͳ͘ɺϝιο υࣗମ͕ݺͼग़͞Ε͍ͯΔ͜ͱΛ֬ೝ͢Δ 10
ϞοΫΦϒδΣΫτͷ࡞Γํ ୯ͳΔελϒͱҧͬͯɺϞοΫΦϒδΣΫτϝιου ͕ݺͼग़͞Εͨ͜ͱΛςετ͠ͳ͚ΕͳΒͳ͍ ϞοΫΦϒδΣΫτϑϨʔϜϫʔΫΛͬͯϞοΫΦϒ δΣΫτΛ࡞͢Δͷ͕Ұൠత දతͳͷ͕PHPUnitඪ४ͷPHPUnit_MockObject ࠓճհ͢ΔPhakeϑϨʔϜϫʔΫͷ1ͭ 11
Phake ײతʹ͑ΔϞοΫΦϒδΣΫτϑϨʔϜϫʔΫ JavaͷMockito͕ϕʔε PHPUnitʹରԠ 12
PHPUnit_MockObject 13 ;
Phake 14 ;
Phake Phake::mock ϞοΫΦϒδΣΫτͷ࡞ Phake::when ελϒϝιουͷ࡞ Phake::verify ϝιου͕ਖ਼͘͠ݺͼग़͞Ε͔ͨ 15
Phake::mock Phake::mock( $classname [, $arg1[, $... ]] ) ࢦఆͨ͠Ϋϥε໊ΛݩʹϞοΫΦϒδΣΫτΛ࡞ ୈ2ҾҎ͕߱ίϯετϥΫλͷҾ
16
Phake::when Phake::when( $mock ) ->ελϒԽ͍ͨ͠ϝιου(ظ͢ΔҾ) ->ݺͼग़͞ΕͨΒͲ͏ͳΔ͔() ελϒԽ͍ͨ͠ϝιουͱҾΛͦͷ··هड़ Phake::when($mock)->foo(Phake::anyParameters()) foo()ϝιου͕ҾΘͣݺͼग़͞ΕΔ 17
Phake::when - Answers thenReturn( $value ) $value Λฦ͢ thenThrow( $exception
) $exception Λεϩʔ thenCallParent() parentݺͼग़͠ 18
Phake::verify Phake::verify( $mock [, $mode ] ) ->ݕূ͢Δϝιου(ظ͢ΔҾ) Phake::verify($mock, Phake::times($n))->foo()
foo()ϝιου͕$nճݺͼग़͞Εͨ͜ͱΛݕূ Phake::verifyNoIntaraction($mock) $mockΦϒδΣΫτͷελϒϝιου͕Կݺͼग़͞ Εͳ͔ͬͨ͜ͱΛݕূ 19
Partial Mocks ௨ৗ Phake::mock() ͰϞοΫΦϒδΣΫτΛ࡞͢Δ ͱɺͯ͢ͷϝιου͕ελϒԽ͞ΕΔ Ұ෦ͷϝιουͷΈελϒԽ͍ͨ͠߹ύʔγϟϧ ϞοΫͱͯ͠࡞͢Δ ύʔγϟϧϞοΫΦϒδΣΫτجຊతʹϝιου͕ ͦͷ··ݺͼग़͞ΕΔ͕ɺPhake::when()Ͱ෦తʹελ
ϒϝιουʹஔ͖͑Δ͜ͱ͕Մೳ 20
21
22
Partial Mocks ύʔγϟϧϞοΫ͕ඞཁʹͳΔΑ͏Ͱ͋Εɺ෦తઃ ܭΛݟ͍͍͢ػձ͔ ύʔγϟϧϞοΫͰελϒԽͨ͠෦ΛผͷΫϥεͱ͠ ͯநग़ͯ͠ɺϞοΫΦϒδΣΫτͰஔ͖͑Δํ͕ͨͿ ΜૉͰΘ͔Γ͍͢ͱࢥ͍·͢ 23
Installation pear config-set auto_discover 1 pear install pear.digitalsandwich.com/phake include_pathΛઃఆͯ͠Phake.phpΛಡΈࠐΉ͚ͩ 24
·ͱΊ PhakeΛ͏ͱײతʹϞοΫΦϒδΣΫτΛ࡞ΕΔ ࢥߟͷྲྀΕʹԊͬͯεϜʔζʹϞοΫΦϒδΣΫτ͕ ࡞ΕΔͨΊςετ͕ḿΔ PHPUnitͷMockObjectͰेͳΒແཧʹΘͳ͍͍ͯ͘ Μ͡Όͳ͍Ͱ͔͢Ͷ…… 25
Links http://phake.digitalsandwich.com/ https://github.com/mlively/Phake http://fivestar.hatenablog.com/ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 26