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

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

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

6c3a375d1752c7f5aafc963296b9d5a0?s=128

tenkoma (Koji Tanaka)

June 16, 2018
Tweet

Transcript

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

  2. ࣗݾ঺հ wాத޹࣏ w!UFOLPNB 5XJUUFS (JU)VC )BUFOBʜ  wࣛࣇౡˠ෱Ԭˠਆಸ઒ˠ౦ژ w#"4&גࣜձࣾ#BDL&OE&OHJOFFS

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

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

    ΒςετεΠʔτࣗମͷػೳ֦ுΛ΍ͬͨͷͰ঺հ
  5. #"4&Ͱͷ 1)1$BLF1)1 ଟ͘ͷϩʔϧͰ1)1ͱ$BLF1)1Λ࢖༻ w ωοτγϣοϓ࡞੒αʔϏε#"4& w γϣοϐϯάΞϓϦʮ#"4&ʯ༻ͷ"1* w ؅ཧը໘ɾόονॲཧʜ

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

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

  8. IUUQEFWCMPHUIFCBTFJOFOUSZ

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

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

    w ϢχοτςετΛָʹ͢ΔͨΊʹػೳ֦ுͨ͘͠ͳͬͨ
  11. BTTFSU4BNFͰ഑ྻͷEJ⒎ Λग़ྗͰ͖ΔΑ͏ʹ͢Δ

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

    BTTFSU&RVBMTʹͳͬͨΓɺ ഑ྻͷΩʔຖʹΞαʔγϣϯ ͨ͠Γ͍ͯͨ͠
  13. ߟ͑ͨ wBTTFSU4BNFͰ΋BTTFSU&RVBMTΈ͍ͨ ʹEJ⒎ग़ͯ͠΄͍͠ w࠷৽൛ͩͱվળ͞ΕͯͨΓ͠ͳ͍͔ͳʁ

  14. IUUQTHJUIVCDPNTFCBTUJBOCFSHNBOOQIQVOJUQVMM

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

  16. Ҡ২Ͱ͖ͨ

  17. None
  18. ֦ுBTTFSU4BNF·ͱΊ wEJ⒎ͰΞαʔγϣϯࣦഊՕॴ͕Ұ໨ͰΘ͔Δ w஋ͷᐆດ͞Λڐ༰͠ͳ͍ b`  w1)16OJUYͰ΋࢖͑Δ☺ w࣮૷͸ޙ೔ެ։͠·͢

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

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

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

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

    IUUQTHJUIVCDPNDBLFQIQDBLFQIQUSFFYMJC$BLF5FTU$BTF5FTU4VJUF
  23. ςετεΠʔτͬͯͲ͏΍ͬͯς ετ͢Δͷ $BLF5FTU$BTF #BTF5FTU$BTF ςετ͍ͨ͠Ϋϥε #BTF5FTU$BTF5FTU ʁ ˢ$POpHVSFΛॻ͖׵͑Δॲཧ͕ͳ͍ ܧঝ

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

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

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

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

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

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

  30. IUUQTHJUIVCDPNUFOLPNBQIQTUVCTNJHIUZNBHJD

  31. ͜Μͳײ͡

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

  33. 1IQ4UPSNઃఆ

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

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