Upgrade to Pro — share decks privately, control downloads, hide ads and more …

テストを書いたことがないエンジニアがテストを書けるようになるまでやったこと at PHPカンファレンス関西2018

Kazuki Higashiguchi
July 14, 2018
3.3k

テストを書いたことがないエンジニアがテストを書けるようになるまでやったこと at PHPカンファレンス関西2018

テストを書いたことがないエンジニアがテストを書けるようになるまでやったこと at PHPカンファレンス関西2018

https://2018.kphpug.jp/

Kazuki Higashiguchi

July 14, 2018
Tweet

More Decks by Kazuki Higashiguchi

Transcript

  1. 1)1ΧϯϑΝϨϯεؔ੢

    #"4&גࣜձࣾ
    ౦ޱ࿨ᏻʢ!,IJHBTIJHVDIJʣ
    ςετΛॻ͍ͨ͜ͱ͕ͳ͍ΤϯδχΞ
    ͕ςετΛॻ͚ΔΑ͏ʹͳΔ·Ͱ΍ͬ
    ͨ͜ͱ

    View full-size slide

  2. ςετॻ͍ͯ·͔͢ʁ

    View full-size slide

  3. ݸਓతͳసػ

    View full-size slide

  4. ςετΛॻ͍ͯͳ͍؀ڥ
    ˣ
    ςετΛॻ͘؀ڥ

    View full-size slide

  5. ͔Β࢝·ͬͯମײͨ͠

    View full-size slide

  6. ʮςετΛॻ͚Δʯʹ͸ɺ
    ৭ʑεςʔδ͕͋Δ

    View full-size slide

  7. ࣗݾ঺հ
    !,IJHBTIJHVDIJ౦ޱ࿨ᏻ
    w ॴଐɿ#"4&גࣜձࣾ
    #"4&1SPEVDU%JWJTJPO
    αʔόαΠυΤϯδχΞ
    w ग़਎ɿฌݿݝ੢ٶࢢ
    w ͜Ε·Ͱͷओͳ͓࢓ࣄɿ
    w ʮ#"4&ʯͷܾࡁྖҬ
    w 1)1ɾ$BLF1)1ͷόʔδϣϯΞοϓ
    w ࢖༻ݴޠɿ1)1(P
    w #MPH
    w IUUQLIJHBTIJHBTIJIBUFOBCMPHDPN
    w (JUIVC
    w IUUQTHJUIVCDPN,IJHBTIJHVDIJ

    View full-size slide

  8. ͦ΋ͦ΋Կނςετॻ͘ͷ
    ͔

    View full-size slide

  9. ͦ΋ͦ΋ԿނςετΛॻ͘ͷ͔
    ʢ˞ݸਓతͳݟղͰ͢ʣ
    ʮԶ͸ͪΌΜͱςετॻ͍ͨΜ΍ʂʯͱ͍͏ࣗ৴ͱ
    ετϨεܰݮ
    w ୯ମͰͷಈ͖ΛอূʹͳΔ
    w ର৅ϝιουͷ࢓༷ॻʹͳΔ
    w ʮຊ౰ʹಈ͘ͷ͔ʯͱ͍͏ετϨε͕ݮΔ
    w ϦϑΝΫλϦϯά͕༰қʹͳΔ
    w ʜFUD
    <ࢀߟ>
    ʮ૊৫ʹςετΛॻ͘จԽΛࠜ෇͔ͤΔઓུͱઓज़ʯIUUQT
    XXXTMJEFTIBSFOFUU@XBEBUFTUTUSBUFHZBOEUBDUJDT

    View full-size slide

  10. 4UBHFT
    w 4UBHFͱʹ͔͘ςετΛॻ͘
    w 4UBHFςετ؍఺ͷ໢ཏΛҙࣝ͢Δ
    w 4UBHFطଘίʔυʹςετΛॻ͘
    w 4UBHFςετۦಈΛ࣮ફͯ͠ΈΔ
    w 4UBHF/FYU4UBHFʜ

    View full-size slide

  11. ςετεςʔδ
    ࣗ෼ͷίʔυʹςετΛ
    ॻ͘

    View full-size slide

  12. ςετεςʔδ
    ʮ΍ͬͨ͜ͱແ͍ʯ
    ˣ
    ʮ΍ͬͨ͜ͱ͋Δʯ

    View full-size slide

  13. ςετεςʔδ
    ࣗ෼ͷίʔυʹςετΛॻ͘ɿୡ੒͍ͨ͜͠ͱ
    w ࣗ෼ͷίʔυʹʮςετΛॻ͘ʯࣄ͕Ͱ͖Δ
    w 1)16OJUͳͲͰABTTFSU999AͰ͖Δ
    w ʮ΍ͬͨ͜ͱແ͍ʯˠʮ΍ͬͨ͜ͱ͋Δʯ΁
    public function testSample(): void
    {
    $this->assertTrue($this->SampleTestModel->Sample(‘hoge’);
    $this->assertFalse($this->SampleTestModel->Sample(‘huga’);
    $this->assertTrue($this->SampleTestModel->Sample(‘yapu’);
    }

    View full-size slide

  14. ςετεςʔδ
    ࣗ෼ͷίʔυʹςετΛॻ͘ɿऔΓ૊Έํ
    w ࠷ॳ͔Β͖Ε͍ʹॻ͜͏ͱ͠ͳ͍
    w ςετέʔεͷߦ਺͕ଟ͍ؾ͕ͯ͠΋Ұ୴0,
    w ॻ͔͘Ͳ͏͔໎ͬͨΒςετΛॻ͘
    w ॻ͍ͯΔ෼ʹ͸ʮѱʯͰ͸ͳ͍͸ͣ
    ˠʮςετΛॻ͘ʯ͜ͱࣗମ͸೉͘͠ͳ͍
    ࣄ͕Θ͔Δ

    View full-size slide

  15. ςετεςʔδ
    ࣗ෼ͷίʔυʹςετΛॻ͘ɿࢀߟʹͨ͠΋ͷ
    w ಉ྅ͷίʔυ
    w ݟΑ͏ݟ·ͶͰ΍ͬͯΈΔ
    w ެࣜνϡʔτϦΞϧ
    w 1)16OJUެࣜνϡʔτϦΞϧ
    w IUUQTQIQVOJUEFHFUUJOHTUBSUFE
    QIQVOJUIUNM
    w ϑϨʔϜϫʔΫͷެࣜυΩϡϝϯτɺ5FTUষ
    w IUUQTCPPLDBLFQIQPSHKB
    EFWFMPQNFOUUFTUJOHIUNM

    View full-size slide

  16. ςετεςʔδ
    ςετ؍఺ͷ໢ཏΛҙࣝ
    ͢Δ

    View full-size slide

  17. ςετεςʔδ
    ʮ΍ͬͨ͜ͱ͋Δʯ
    ˣ
    ʮे෼ͳςετΛॻ͘ʯ

    View full-size slide

  18. ςετεςʔδ
    ςετ؍఺ͷ໢ཏΛҙࣝ͢Δɿୡ੒͍ͨ͜͠ͱ
    w ςετ؍఺ͷ໢ཏΛҙࣝ͢Δ
    w े෼ʹςετ͞Ε͍ͯΔ
    w ςετ؍఺
    w ؔ਺ͷ*/065
    w Ҿ਺ɾ໭Γ஋ɾྫ֎
    w ϝιου಺Ͱى͜Δ͜ͱ
    w %#ૢ࡞
    w ηογϣϯૢ࡞
    w ʜFUD

    View full-size slide

  19. ςετεςʔδ
    ςετ؍఺ͷ໢ཏΛҙࣝ͢ΔɿऔΓ૊Έํ
    w ςετ؍఺ʹ͢΂͖͔໎ͬͨΒςετΛॻ͘
    w ʮ͜ͷςετέʔε಺Ͱ΍Δ΂͖ͳͷ͔ʁʯ
    w ॻ͍ͯΔ෼ʹ͸ʮѱʯͰ͸ͳ͍͸ͣʢೋճ໨ʣ
    w ˞ͨͩ͠ɺͳʹ͔ίʔυઃܭ͕ྑ͘ͳ͍Մೳੑ͋Γ
    w NPEFMͰTFTTJPOΛ͍͡Δͱ͔ͦ͏͍͏ྨ
    ˠςετίʔυ͕࢓༷ॻʹͳΔ

    View full-size slide

  20. w ςετίʔυͰ୯ମϨϕϧͰͷಈ࡞͕Θ͔Γอূ
    ͞ΕΔ
    w ˠϨϏϡʔ୯ҐɾϦϦʔε୯Ґͷ෼ׂ͕Մೳʹͳ
    Δ
    w ϨϏϡʔΛ΋Β͍΍͍͢ࡉ͔͍ϓϧϦΫͷ੾Γ෼͚ํ
    BU1)1FS,BJHJ
    ςετεςʔδ
    ςετ؍఺ͷ໢ཏΛҙࣝ͢Δɿ෭࣍తޮೳ

    View full-size slide

  21. ςετεςʔδ
    ςετ؍఺ͷ໢ཏΛҙࣝ͢Δɿࢀߟࢿྉ
    w ςετ͢ΔͨΊʹ1)16OJUͷػೳΛ֮͑Δ
    w ྫ֎ͷςετ
    w 1)16OJUFYQFDUFE&YDFQUJPO
    w IUUQTQIQVOJUEFNBOVBMKB
    BQQFOEJYFTBOOPUBUJPOTIUNMBQQFOEJYFTB
    OOPUBUJPOTFYQFDUFE&YDFQUJPO
    w EBUB1SPWJEFS
    w 1)16OJUEBUB1SPWJEFS
    w QIQVOJUSFBEUIFEPDTJPFOXSJUJOH
    UFTUTGPSQIQVOJUIUNM
    w 1)16OJUͱσʔλϓϩόΠμͱςετέʔεੜ੒
    w IUUQTRJJUBDPN)JSBLVJUFNT
    DGFFEBE

    View full-size slide

  22. ςετεςʔδ
    ςετ؍఺ͷ໢ཏΛҙࣝ͢Δɿࢀߟࢿྉ
    w ςετ͢ΔͨΊʹ1)16OJUͷػೳΛ֮͑Δ
    w .PDL
    w 1)16OJUUFTUEPVCMFT
    w IUUQTQIQVOJUEFNBOVBMFOUFTU
    EPVCMFTIUNM
    w ϨϏϡʔ୯Ґͷ෼ׂ
    w ϨϏϡʔΛ΋Β͍΍͍͢ࡉ͔͍ ϓϧϦΫͷ੾Γ෼͚ํ
    BU1)1FS,BJHJ
    w IUUQTTQFBLFSEFDLDPNLIJHBTIJHVDIJ
    SFCJZVXPNPSBJZBTVJYJLBJQVSVSJLVGBMTFRJF
    SJGFOLFGBOHBUQIQFSLBJHJ

    View full-size slide

  23. ςετεςʔδ
    طଘίʔυʹςετΛॻ
    ͘

    View full-size slide

  24. ςετεςʔδ
    ʮे෼ͳςετΛॻ͘ʯ
    ˣ
    ʮطଘίʔυΛे෼ʹ͠
    ͍ͯ͘ʯ

    View full-size slide

  25. ςετεςʔδ
    طଘίʔυʹςετΛॻ͘ɿୡ੒͍ͨ͜͠ͱ
    w طଘίʔυͷಈ࡞Λอূ͢Δ
    w طଘίʔυʹରͯ͠ςετΛೖΕ͍ͯ͘
    w ʮςετ͕ͳ͍ʯطଘίʔυʹ͸ଟ͘ͷࠔ೉͕
    જΉ

    View full-size slide

  26. ςετεςʔδ
    طଘίʔυʹςετΛॻ͘ɿࠔ೉
    w طଘίʔυʹର͢Δςετͷࠔ೉
    w όάͳͷ͔࢓༷ͳͷ͔
    w ςετ͠ʹ͘͞
    w ֎෦࿈ܞ
    w ੹຿ͷଟ͍ίʔυ
    w ࣮ߦ·Ͱʹଟ͘ͷʮ४උʯΛཁ͢Δ΋ͷ
    w AFYJU
    AͰςετϓϩηε͕ࢮ͵
    w ʜFUD

    View full-size slide

  27. ςετεςʔδ
    طଘίʔυʹςετΛॻ͘ɿऔΓ૊Έํ
    w ݱࡏͷಈ࡞Λอূ͢Δ
    w ʮݱࡏͷίʔυ͸͜ͷΑ͏ʹಈ͍͍ͯΔʯ఺Λ
    ໌Β͔ʹ͢Δʢ࢓༷Խςετʣ
    w ࢓༷͕෼͔Δ৔߹͸ɺظ଴͢Δಈ࡞ΛςετͰ
    ॻ্͍ͨͰमਖ਼͢Δ

    View full-size slide

  28. ςετεςʔδ
    طଘίʔυʹςετΛॻ͘ɿऔΓ૊Έํ
    w ςετ͠΍͍͢ίʔυʹվળ
    w ʮґଘੑ஫ೖʢ%*ʣʯͳͲΛߦ͍݁߹౓ΛԼ͛
    ͍ͯ͘
    w ςετ͢ΔͨΊͷ࢓૊ΈΛ࢖͏
    w ࣌ؒʹґଘͨ͠ςετUJNFDPQʜFUD
    w ϞοΫԽ
    w 4UBUJDNFUIPETUBUJDNPDLʜFUD
    w ૊ΈࠐΈؔ਺SVOLJUʜFUD
    w ˞༻๏༻ྔʹ͝஫ҙ͍ͩ͘͞

    View full-size slide

  29. ςετεςʔδ
    طଘίʔυʹςετΛॻ͘ɿࢀߟࢿྉ
    w ϨΨγʔίʔυվળΨΠυcBNB[PO
    IUUQTXXXBNB[PODPKQEQ#"/8SFGEQLJOEMFSFEJSFDU
    @FODPEJOH65'CULS

    View full-size slide

  30. ςετεςʔδ
    طଘίʔυʹςετΛॻ͘ɿࢀߟࢿྉ
    w ࢓༷Խςετʹ͍ͭͯ
    w #"4&ͷ1)1ΞϓϦΞοϓσʔτʹ͍ͭͯ
    w IUUQTTQFBLFSEFDLDPNUFOLPNB@CBTF
    GBMTFQIQBIVSJBUVIVUFUPOJUVJUF

    View full-size slide

  31. ςετεςʔδ
    طଘίʔυʹςετΛॻ͘ɿࢀߟࢿྉ
    w ςετ͠΍͍͢ίʔυʹվળ
    w FDIPFYJU͍ͯ͠Δ1)1ίʔυΛϢχοτςετͰ
    อޢ͠ͳ͕Βվળ͢Δ
    w IUUQTRJJUBDPNUFOLPNBJUFNT
    BDCD
    w ґଘੑ஫ೖ %*
    ͷղઆͱ΍Γํ
    w IUUQTRJJUBDPNLJUFNT
    BFGBFECGDDDF

    View full-size slide

  32. ςετεςʔδ
    طଘίʔυʹςετΛॻ͘ɿࢀߟࢿྉ
    w ςετ͢ΔͨΊͷ࢓૊Έ
    w IOXQIQUJNFDPQ
    w IUUQTHJUIVCDPNIOXQIQUJNFDPQ
    w UPUPUPTIJTUBUJDNPDL
    w IUUQTHJUIVCDPNUPUPUPTIJTUBUJDNPDL
    w SVOLJUͱVPQ[ʹ͍ͭͯ
    w IUUQTRJJUBDPNLVOJUJUFNT
    DBBEFFDG

    View full-size slide

  33. ςετεςʔδ
    ςετۦಈ։ൃΛ࣮ફͯ͠
    ΈΔ

    View full-size slide

  34. ςετεςʔδ
    ʮطଘίʔυΛॆ෼ʹͯ͠
    ͘ʯ
    ˣ
    ʮςετۦಈͰ࣮૷ͯ͠Έ
    Δʯ

    View full-size slide

  35. ςετεςʔδ
    ςετۦಈ։ൃͰ࣮૷ͯ͠ΈΔɿୡ੒͍ͨ͜͠ͱ
    w ςετۦಈ։ൃΛ࣮ફ͢Δ
    w ࢀߟɿςετۦಈ։ൃͬͯԿͩΖ͏
    w എܠ
    w ೥݄ʮςετۦಈ։ൃʯ
    w ςετ͠ʹ͍͘ີ݁߹ͳίʔυΛ࠶ੜ࢈ͨ͘͠
    ͳ͍ؾ࣋ͪ

    View full-size slide

  36. ςετεςʔδ
    ςετۦಈ։ൃͰ࣮૷ͯ͠ΈΔɿऔΓ૊Έํ
    w ςετۦಈ։ൃΛֶश͢Δ
    w ஶॻɿʮςετۦಈ։ൃʯΛಡΈਐΊ͍ͯ͘
    w ஶॻ಺ͷݴޠɿ+BWB1ZUIPO
    w ଞͷݴޠͰॻ͍ͯΈΔɿ3VTU
    w ςετۦಈ։ൃΛ࣮ફͯ͠ΈΔ

    View full-size slide

  37. ςετεςʔδ
    ςετۦಈ։ൃΛ࣮ફͯ͠ΈΔɿࢀߟࢿྉ
    w ςετۦಈ։ൃcBNB[PO
    IUUQTXXXBNB[PODPKQEQ#%-$SFGEQLJOEMFSFEJSFDU
    @FODPEJOH65'CULS

    View full-size slide

  38. ςετεςʔδ
    طଘίʔυʹςετΛॻ͘ɿࢀߟࢿྉ
    w ςετۦಈ։ൃͬͯԿͩΖ͏
    w IUUQTEFWDMBTTNFUIPEKQ
    TUVEZ@NFFUJOHSFBEXIBUUEE
    w ॻ੶ʮςετۦಈ։ൃʯΛ3VTUͰॻ͘
    ʢDIBQUFSʜʣ
    w IUUQTRJJUBDPN,IJHBTIJHVDIJJUFNT
    EGDEEG

    View full-size slide

  39. ςετεςʔδ/FYUʜ
    99999

    View full-size slide

  40. ςετεςʔδ
    99999
    w ςετεςʔδ͸·ͩ·ͩઌ͕͋ΔΑ͏
    w ςελϏϦςΟͷྑ͍ίʔυઃܭΛߦ͏
    w σβΠϯύλʔϯʹ͍ͭͯ
    w ந৅Խ
    w ςετΛ͠΍͍͢ج൫Λ࡞Δ
    ʜFUD

    View full-size slide

  41. ҰεςʔδͣͭਐΜͰ
    ͍͖·͠ΐ͏✍

    View full-size slide

  42. #"4&גࣜձࣾ
    ౦ޱ࿨ᏻʢ!,IJHBTIJHVDIJʣ
    ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

    View full-size slide