2012.03.27 PHP勉強会@東京 #58
PhakeͰ؆୯ϞοΫΦϒδΣΫτ࡞Katsuhiro OGAWA @fivestr2012.03.27 - PHPษڧձ@౦ژ #58
View Slide
About Meখ ༤େ - OGAWA Katsuhiro @fivestrגࣜձࣾΫϩίεձࣾͰߴڮͬͯݺΕͯ·͢ύʔϑΣΫτPHPॻ͖·ͨ͠5݄ʹPHPͷຊग़͢Έ͍ͨͰ͢ (৭ʑະఆ)OOPɺMVCɺDDD2
AgendaελϒͱϞοΫPhakeͱPhake APIPhakeͷΠϯετʔϧ3
ςετ͕͍ʁDBIOɺWeb APIͳͲͷΞΫηεΛ͏ॲཧͷςετͬͯͲ͏ͯ͠·͔͢ʁDBΞΫηεͯͨ͠Βςετ͕͘ͳͬͨΓ͢Δ͠ɺWebAPIͩͱωοτϫʔΫʹͭͳ͕ͬͯͳ͍ͱςετͰ͖ͳ͍Ͱ͢ΑͶͦΜͳͱ͖ελϒͷग़൪Ͱ͢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_MockObject13;
Phake14;
PhakePhake::mockϞοΫΦϒδΣΫτͷ࡞Phake::whenελϒϝιουͷ࡞Phake::verifyϝιου͕ਖ਼͘͠ݺͼग़͞Ε͔ͨ15
Phake::mockPhake::mock( $classname [, $arg1[, $... ]] )ࢦఆͨ͠Ϋϥε໊ΛݩʹϞοΫΦϒδΣΫτΛ࡞ୈ2ҾҎ͕߱ίϯετϥΫλͷҾ16
Phake::whenPhake::when( $mock )->ελϒԽ͍ͨ͠ϝιου(ظ͢ΔҾ)->ݺͼग़͞ΕͨΒͲ͏ͳΔ͔()ελϒԽ͍ͨ͠ϝιουͱҾΛͦͷ··هड़Phake::when($mock)->foo(Phake::anyParameters())foo()ϝιου͕ҾΘͣݺͼग़͞ΕΔ17
Phake::when - AnswersthenReturn( $value )$value Λฦ͢thenThrow( $exception )$exception ΛεϩʔthenCallParent()parentݺͼग़͠18
Phake::verifyPhake::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
Installationpear config-set auto_discover 1pear install pear.digitalsandwich.com/phakeinclude_pathΛઃఆͯ͠Phake.phpΛಡΈࠐΉ͚ͩ24
·ͱΊPhakeΛ͏ͱײతʹϞοΫΦϒδΣΫτΛ࡞ΕΔࢥߟͷྲྀΕʹԊͬͯεϜʔζʹϞοΫΦϒδΣΫτ͕࡞ΕΔͨΊςετ͕ḿΔPHPUnitͷMockObjectͰेͳΒແཧʹΘͳ͍͍ͯ͘Μ͡Όͳ͍Ͱ͔͢Ͷ……25
Linkshttp://phake.digitalsandwich.com/https://github.com/mlively/Phakehttp://fivestar.hatenablog.com/͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠26