Slide 1

Slide 1 text

PhakeͰ؆୯ ϞοΫΦϒδΣΫτ࡞੒ Katsuhiro OGAWA @fivestr 2012.03.27 - PHPษڧձ@౦ژ #58

Slide 2

Slide 2 text

About Me খ઒ ༤େ - OGAWA Katsuhiro @fivestr גࣜձࣾΫϩίε ձࣾͰ͸ߴڮͬͯݺ͹Εͯ·͢ ύʔϑΣΫτPHPॻ͖·ͨ͠ 5݄ʹ΋PHPͷຊग़͢Έ͍ͨͰ͢ (৭ʑະఆ) OOPɺMVCɺDDD 2

Slide 3

Slide 3 text

Agenda ελϒͱϞοΫ Phakeͱ͸ Phake API PhakeͷΠϯετʔϧ 3

Slide 4

Slide 4 text

ςετ͕஗͍ʁ DB΍IOɺWeb APIͳͲ΁ͷΞΫηεΛ൐͏ॲཧͷςε τͬͯͲ͏ͯ͠·͔͢ʁ DBΞΫηεͯͨ͠Βςετ͕஗͘ͳͬͨΓ͢Δ͠ɺWeb APIͩͱωοτϫʔΫʹͭͳ͕ͬͯͳ͍ͱςετͰ͖ͳ͍ Ͱ͢ΑͶ ͦΜͳͱ͖͸ελϒͷग़൪Ͱ͢ 4

Slide 5

Slide 5 text

ελϒͱ͸ લड़ͷΑ͏ͳ֎෦ͷԿ͔΁ͷΞΫηεͷ୅ΘΓʹఆ਺Λ ฦ͢Α͏ʹͨ͠΋ͷ͕ελϒ stub out - ΋Έফ͢ ैདྷ:ɹɹreturn $webservice->api($id); ελϒ:ɹreturn [‘id’ => ‘1’, ‘name’ => ‘takahashi’]; ఆ਺ʹஔ͖׵͑Δ 5

Slide 6

Slide 6 text

αϯϓϧ FacebookΫϥε͸ Facebook͕ఏڙ͢Δ PHP SDKɻ api()ϝιουͰAPI΁ ΞΫηε ClientΫϥε͸ FacebookΦϒδΣΫ τΛ࢖ͬͯσʔλΞΫ ηε 6

Slide 7

Slide 7 text

ελϒͰࠩ͠ସ͑ FacebookΫϥεͷ api()ϝιουΛ্ॻ͖ ͯ͠ఆ਺Λฦ͢Α͏ʹ ͢Ε͹ɺWeb API΁ͷ ΞΫηεΛͳͤ͘Δ ্ҐϞδϡʔϧ ԼҐϞδϡʔϧ 7

Slide 8

Slide 8 text

ελϒͷ׆༻ ελϒΛ࢖͏ͱɺDB΍Web APIͱ͍ͬͨɺ֎෦ͷԿ͔΁ ͷґଘΛ੾Γ཭͢͜ͱ͕Մೳ ֎෦ͷԿ͔΁ͷΞΫηε͕Ͱ͖ͳ͍ঢ়ଶͰ΋ɺΞΫηε ॲཧΛελϒʹஔ͖׵͑Δ͜ͱͰ্ҐϞδϡʔϧͷςε τ͕Մೳ 8

Slide 9

Slide 9 text

ϞοΫΦϒδΣΫτͱ͸ ϞοΫΦϒδΣΫτ͸ελϒͷҰछ ελϒ͕ԿΒ͔ͷಈ࡞ͷ୅༻඼Ͱ͔͠ͳ͍ͷʹରͯ͠ɺ ϞοΫΦϒδΣΫτ͸্ҐϞδϡʔϧ͕ԼҐϞδϡʔϧ Λਖ਼͘͠࢖༻͍ͯ͠Δ͔Λςετ͢ΔͨΊͷ΋ͷ 9

Slide 10

Slide 10 text

ϞοΫΦϒδΣΫτͷ׆༻ DBʹอଘ͢ΔΑ͏ͳ໭Γ஋Λ൐Θͳ͍ϝιουΛελϒ Խ͍ͨ͠ͱ͖͸ɺ໭Γ஋͕ԿͰ͋Δ͔Ͱ͸ͳ͘ɺϝιο υࣗମ͕ݺͼग़͞Ε͍ͯΔ͜ͱΛ֬ೝ͢Δ 10

Slide 11

Slide 11 text

ϞοΫΦϒδΣΫτͷ࡞Γํ ୯ͳΔελϒͱҧͬͯɺϞοΫΦϒδΣΫτ͸ϝιου ͕ݺͼग़͞Εͨ͜ͱΛςετ͠ͳ͚Ε͹ͳΒͳ͍ ϞοΫΦϒδΣΫτϑϨʔϜϫʔΫΛ࢖ͬͯϞοΫΦϒ δΣΫτΛ࡞੒͢Δͷ͕Ұൠత ୅දతͳ΋ͷ͕PHPUnitඪ४ͷPHPUnit_MockObject ࠓճ঺հ͢ΔPhake΋ϑϨʔϜϫʔΫͷ1ͭ 11

Slide 12

Slide 12 text

Phake ௚ײతʹ࢖͑ΔϞοΫΦϒδΣΫτϑϨʔϜϫʔΫ JavaͷMockito͕ϕʔε PHPUnitʹ΋ରԠ 12

Slide 13

Slide 13 text

PHPUnit_MockObject 13 ;

Slide 14

Slide 14 text

Phake 14 ;

Slide 15

Slide 15 text

Phake Phake::mock ϞοΫΦϒδΣΫτͷ࡞੒ Phake::when ελϒϝιουͷ࡞੒ Phake::verify ϝιου͕ਖ਼͘͠ݺͼग़͞Ε͔ͨ 15

Slide 16

Slide 16 text

Phake::mock Phake::mock( $classname [, $arg1[, $... ]] ) ࢦఆͨ͠Ϋϥε໊ΛݩʹϞοΫΦϒδΣΫτΛ࡞੒ ୈ2Ҿ਺Ҏ͕߱ίϯετϥΫλͷҾ਺ 16

Slide 17

Slide 17 text

Phake::when Phake::when( $mock ) ->ελϒԽ͍ͨ͠ϝιου(ظ଴͢ΔҾ਺) ->ݺͼग़͞ΕͨΒͲ͏ͳΔ͔() ελϒԽ͍ͨ͠ϝιουͱҾ਺Λͦͷ··هड़ Phake::when($mock)->foo(Phake::anyParameters()) foo()ϝιου͕Ҿ਺໰Θͣݺͼग़͞ΕΔ 17

Slide 18

Slide 18 text

Phake::when - Answers thenReturn( $value ) $value Λฦ͢ thenThrow( $exception ) $exception Λεϩʔ thenCallParent() parentݺͼग़͠ 18

Slide 19

Slide 19 text

Phake::verify Phake::verify( $mock [, $mode ] ) ->ݕূ͢Δϝιου(ظ଴͢ΔҾ਺) Phake::verify($mock, Phake::times($n))->foo() foo()ϝιου͕$nճݺͼग़͞Εͨ͜ͱΛݕূ Phake::verifyNoIntaraction($mock) $mockΦϒδΣΫτͷελϒϝιου͕Կ΋ݺͼग़͞ Εͳ͔ͬͨ͜ͱΛݕূ 19

Slide 20

Slide 20 text

Partial Mocks ௨ৗ Phake::mock() ͰϞοΫΦϒδΣΫτΛ࡞੒͢Δ ͱɺ͢΂ͯͷϝιου͕ελϒԽ͞ΕΔ Ұ෦ͷϝιουͷΈελϒԽ͍ͨ͠৔߹͸ύʔγϟϧ ϞοΫͱͯ͠࡞੒͢Δ ύʔγϟϧϞοΫΦϒδΣΫτ͸جຊతʹ͸ϝιου͕ ͦͷ··ݺͼग़͞ΕΔ͕ɺPhake::when()Ͱ෦෼తʹελ ϒϝιουʹஔ͖׵͑Δ͜ͱ͕Մೳ 20

Slide 21

Slide 21 text

21

Slide 22

Slide 22 text

22

Slide 23

Slide 23 text

Partial Mocks ύʔγϟϧϞοΫ͕ඞཁʹͳΔΑ͏Ͱ͋Ε͹ɺ෦෼తઃ ܭΛݟ௚͍͍͢ػձ͔΋ ύʔγϟϧϞοΫͰελϒԽͨ͠෦෼ΛผͷΫϥεͱ͠ ͯநग़ͯ͠ɺϞοΫΦϒδΣΫτͰஔ͖׵͑Δํ͕ͨͿ Μૉ௚ͰΘ͔Γ΍͍͢ͱࢥ͍·͢ 23

Slide 24

Slide 24 text

Installation pear config-set auto_discover 1 pear install pear.digitalsandwich.com/phake include_pathΛઃఆͯ͠Phake.phpΛಡΈࠐΉ͚ͩ 24

Slide 25

Slide 25 text

·ͱΊ PhakeΛ࢖͏ͱ௚ײతʹϞοΫΦϒδΣΫτΛ࡞ΕΔ ࢥߟͷྲྀΕʹԊͬͯεϜʔζʹϞοΫΦϒδΣΫτ͕ ࡞ΕΔͨΊςετ͕ḿΔ PHPUnitͷMockObjectͰे෼ͳΒແཧʹ࢖Θͳ͍͍ͯ͘ Μ͡Όͳ͍Ͱ͔͢Ͷ…… 25

Slide 26

Slide 26 text

Links http://phake.digitalsandwich.com/ https://github.com/mlively/Phake http://fivestar.hatenablog.com/ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 26