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
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ネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
5
4.3k
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
320
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
500
setup-vp GitLab対応の裏側
naokihaba
0
120
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
330
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
530
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
300
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
1
12k
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.2k
SREの越境 / SRE Collaboration
y0hgi
2
270
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
140
すこし踏み込む CancellationToken
htkym
2
910
Featured
See All Featured
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
How to Ace a Technical Interview
jacobian
281
24k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
900
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
480
A better future with KSS
kneath
240
18k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
The agentic SEO stack - context over prompts
schlessera
0
940
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
330
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