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

ユニットテストを書きやすくするためにテストスイートを拡張する / Extend test suite to make unit test easier to write

ユニットテストを書きやすくするためにテストスイートを拡張する / Extend test suite to make unit test easier to write

【非公式】PHPカンファレンス福岡2018前夜祭リジェクトコン #phpconfuk_rej
にて発表したときのスライドです。

tenkoma (Koji Tanaka)

June 16, 2018
Tweet

More Decks by tenkoma (Koji Tanaka)

Other Decks in Programming

Transcript

  1. ϢχοτςετΛॻ͖΍͘͢
    ͢ΔͨΊʹςετεΠʔτΛ
    ֦ு͢Δ
    ాத޹࣏!UFOLPNB
    1)1ΧϯϑΝϨϯε෱Ԭඇެࣜલ໷ࡇ
    ϦδΣΫτίϯ
    QIQDPOGVL@SFK

    View Slide

  2. ࣗݾ঺հ
    wాத޹࣏
    w!UFOLPNB 5XJUUFS (JU)VC )BUFOBʜ

    wࣛࣇౡˠ෱Ԭˠਆಸ઒ˠ౦ژ
    w#"4&גࣜձࣾ#BDL&OE&OHJOFFS

    View Slide

  3. ໨࣍
    w#"4&ͷ1)1ΞϓϦέʔγϣϯʹ͍ͭͯ
    w1)1ΞϓϦέʔγϣϯ޲͚ͷςετεΠʔτΛ
    ΧελϚΠζ͢Δ
    wςετεΠʔτͷػೳΛςετ͢Δ
    wςετ༻1)1֦ுͷίʔυΛิ׬Ͱ͖ΔΑ͏ʹ
    ͢Δ

    View Slide

  4. ·͓͖͑
    w ೥݄ʹೖࣾͨ͠ͱ͖ɺ!LVOJU͞Μͱ͍͏
    ϓϩάϥϚ͕ۀ຿ࢧԉͰۈ຿͞Ε͍ͯͨ
    w 1)1ϑϨʔϜϫʔΫόʔδϣϯΞοϓΛ໨ඪʹ
    ਾ͑ͯ%PDLFS։ൃ؀ڥͷ੔උ΍Ϣχοτςετɺ
    $*ͷηοτΞοϓ࡞ۀΛ͞Ε͍ͯͨɻ
    w ҰॹʹϓϩμΫτͷ1)1Ξοϓσʔτ࡞ۀΛ͠ͳ͕
    ΒςετεΠʔτࣗମͷػೳ֦ுΛ΍ͬͨͷͰ঺հ

    View Slide

  5. #"4&Ͱͷ
    1)1$BLF1)1
    ଟ͘ͷϩʔϧͰ1)1ͱ$BLF1)1Λ࢖༻
    w ωοτγϣοϓ࡞੒αʔϏε#"4&
    w γϣοϐϯάΞϓϦʮ#"4&ʯ༻ͷ"1*
    w ؅ཧը໘ɾόονॲཧʜ

    View Slide

  6. #"4&ͷHJUϦϙδτϦ
    γϣοϓ࡞੒
    ϞόΠϧΞϓϦ"1*
    όοΫΦϑΟε
    ࣗ࡞ϓϥάΠϯ
    ࣗ࡞ϓϥάΠϯY
    $BLF1)1ΞϓϦέʔγϣϯ $BLF1)1ϓϥάΠϯ
    ʜ
    ࣗ࡞ϓϥάΠϯ

    View Slide

  7. 1)1 $BLF1)1
    όʔδϣϯΞοϓϓϩδΣΫτ
    w1)1ˠ
    w$BLF1)1ʙˠ
    w೥݄ʹ׬ྃ

    View Slide

  8. IUUQEFWCMPHUIFCBTFJOFOUSZ

    View Slide

  9. #"4&ͷHJUϦϙδτϦ
    γϣοϓ࡞੒
    ϞόΠϧΞϓϦ"1*
    όοΫΦϑΟε
    $BLF1)1ΞϓϦέʔγϣϯ $BLF1)1ϓϥάΠϯ
    ςετεΠʔτ
    ϓϥάΠϯ
    ࣗ࡞ϓϥάΠϯ
    ࣗ࡞ϓϥάΠϯY
    ʜ
    ࣗ࡞ϓϥάΠϯ

    View Slide

  10. ςετεΠʔτϓϥάΠϯ
    w ϑΟΫενϟʔͷ֦ுɺάϩʔόϧม਺؅ཧͳͲͷػೳ
    ͕͋ͬͨ
    w ΞϓϦέʔγϣϯͷํ͸ෆ଍͍ͯͨ͠$*ઃఆ΍ςετ͕
    ॆ࣮ͭͭ͋ͬͨ͠
    w ͨͩ͠ςετεΠʔτϓϥάΠϯࣗମʹ͸ςετ͕ͳ͔ͬ
    ͨ
    w ϢχοτςετΛָʹ͢ΔͨΊʹػೳ֦ுͨ͘͠ͳͬͨ

    View Slide

  11. BTTFSU4BNFͰ഑ྻͷEJ⒎
    Λग़ྗͰ͖ΔΑ͏ʹ͢Δ

    View Slide

  12. BTTFSU4BNF
    w $BLF1)1·Ͱ͸഑ྻ஍ࠈ
    ϥϒͳϑϨʔϜϫʔΫ
    w ڊେͳ഑ྻΛΞαʔγϣϯࣦ
    ഊ͢ΔͱɺͲ͜ʹ͕ࠩ͋Δͷ
    ͔Θ͔ΓͮΒ͍
    w ݁Ռɺ΍ΉΛ͑ͣ
    BTTFSU&RVBMTʹͳͬͨΓɺ
    ഑ྻͷΩʔຖʹΞαʔγϣϯ
    ͨ͠Γ͍ͯͨ͠

    View Slide

  13. ߟ͑ͨ
    wBTTFSU4BNFͰ΋BTTFSU&RVBMTΈ͍ͨ
    ʹEJ⒎ग़ͯ͠΄͍͠
    w࠷৽൛ͩͱվળ͞ΕͯͨΓ͠ͳ͍͔ͳʁ

    View Slide

  14. IUUQTHJUIVCDPNTFCBTUJBOCFSHNBOOQIQVOJUQVMM

    View Slide

  15. ͜Ε࢖͍͍ͨʂ
    w͔͜͠͠Ε͕ಋೖ͞Εͨͷ͸1)16OJUʜ
    w$BLF1)1ΞϓϦͰ͸Y·Ͱ͔͠࢖͑ͳ͍
    wҠ২͢Δͧʂ

    View Slide

  16. Ҡ২Ͱ͖ͨ

    View Slide

  17. View Slide

  18. ֦ுBTTFSU4BNF·ͱΊ
    wEJ⒎ͰΞαʔγϣϯࣦഊՕॴ͕Ұ໨ͰΘ͔Δ
    w஋ͷᐆດ͞Λڐ༰͠ͳ͍ b`

    w1)16OJUYͰ΋࢖͑Δ☺
    w࣮૷͸ޙ೔ެ։͠·͢

    View Slide

  19. ςετεΠʔτͷςε
    τΛॻ͘

    View Slide

  20. ςετεΠʔτͷςετΛॻ͘
    wBTTFSU4BNFΛ࣮૷͢Δલʹطଘͷ
    ػೳΛςετͨ͘͠ͳͬͨ
    wςετεΠʔτͬͯͲ͏΍ͬͯςε
    τ͢Δͷ

    View Slide

  21. ςετޙʹ$POpHVSFͰ؅ཧ͍ͯ͠Δ
    ઃఆ͕ݩ௨ΓʹͳΔ͜ͱΛςετ͍ͨ͠

    View Slide

  22. ςετεΠʔτͬͯͲ͏΍ͬͯς
    ετ͢Δͷ
    w ͜ͷTFU6Q UFBS%PXOͷهड़Λςετ͍ͨ͠
    w $BLF1)1ຊମͷίʔυΛಡΜͩ
    w 5FTU4VJUFͷςετίʔυ͕͋ͬͨ
    w IUUQTHJUIVCDPNDBLFQIQDBLFQIQUSFFYMJC$BLF5FTU$BTF5FTU4VJUF

    View Slide

  23. ςετεΠʔτͬͯͲ͏΍ͬͯς
    ετ͢Δͷ
    $BLF5FTU$BTF
    #BTF5FTU$BTF
    ςετ͍ͨ͠Ϋϥε

    #BTF5FTU$BTF5FTU
    ʁ
    ˢ$POpHVSFΛॻ͖׵͑Δॲཧ͕ͳ͍
    ܧঝ

    View Slide

  24. ςετεΠʔτͬͯͲ͏΍ͬͯς
    ετ͢Δͷ
    $BLF5FTU$BTF
    #BTF5FTU$BTF
    ςετ͍ͨ͠Ϋϥε

    #BTF5FTU$BTF5FTU
    %VNNZ5FTU
    ܧঝ
    ܧঝ
    SVO

    View Slide

  25. w ઃఆΛॻ͖ࠐΜͰͦͷ஋ΛΞαʔγϣϯ
    w SVO
    ࣮ߦ͢ΔલʹઃఆΛॻ͖ࠐΉ
    w ࣮ߦޙʹݩʹ໭Δ͜ͱΛΞαʔγϣϯ
    %VNNZ5FTU
    #BTF5FTU$BTF5FTU

    View Slide

  26. ԾͷςετέʔεΛ࡞ͬͯ
    ৼΔ෣͍ΛςετͰ͖ͨ

    View Slide

  27. ςετ༻1)1֦ுͷίʔ
    υΛิ׬Ͱ͖ΔΑ͏ʹ͢Δ

    View Slide

  28. 1IQ4UPSN͕
    ิ׬ͯ͘͠Εͳ͍ίʔυ
    w5JNFDPQ
    wSVOLJU
    wςετ࣌ʹ͔͠࢖Θͳ͍
    w1IQ4UPSNͷิ׬༻ϑΝΠϧʹೖͬͯͳ͍
    w IUUQTHJUIVCDPN+FU#SBJOTQIQTUPSNTUVCT
    wิ׬Ͱ͖ͳ͍ɺܯࠂग़ΔˠετϨε

    View Slide

  29. ߟ͑ͨ
    w୭͔ิ׬༻ͷϑΝΠϧ࡞ͬͯΔํ
    ͍ͳ͍͔ͳʁˠݟ͔ͭΒͳ͍
    w࡞Ζ͏

    View Slide

  30. IUUQTHJUIVCDPNUFOLPNBQIQTUVCTNJHIUZNBHJD

    View Slide

  31. ͜Μͳײ͡

    View Slide

  32. QIQTUVCTNJHIUZNBHJD
    wSVOLJU UJNFDPQ VPQ[༻
    ελϒϑΝΠϧ

    View Slide

  33. 1IQ4UPSNઃఆ

    View Slide

  34. ଞʹ΋
    wςετεΠʔτϓϥάΠϯ΋$*Ͱςετ
    w1)1 Ͱ·ͱΊͯςετ࣮ߦ
    wϦϑϨΫγϣϯΛ࢖ͬͯQSJWBUFͳϝϯό
    ΛಡΈॻ͖͢Δϝιου࣮૷

    View Slide

  35. ·ͱΊ
    wςετέʔεΛΧελϚΠζͯ͠ςετΛ
    ָʹ
    wςετεΠʔτʹςετΛ͔͍ͯΈͨ
    w5JNFDPQΫϥεͱ͔ิ׬Ͱ͖ΔΑ͏ʹ
    wςετॻ͘ͷΛָʹͯ͠։ൃΛָ͘͠͠
    ·͠ΐ͏

    View Slide