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

Clean Test Code Revised

Clean Test Code Revised

Rails Developer Meetup 2019での発表資料です!可読性の高いテストコードを書くためのコツについて話しました

Shinichi Maeshima

March 23, 2019
Tweet

More Decks by Shinichi Maeshima

Other Decks in Technology

Transcript

  1. Clean Test Code Revised @willnet

  2. Έͳ͞Μ ςετॻ͍ͯ·͔͢ʁ

  3. ͜͜Ͱશһख্͕͕ Δ༧ఆ✋

  4. ςετॻ͘ͷָ͍͠ ਓʁ

  5. ͜͜Ͱશһ͕໨Λ෬ ͤΔ༧ఆ

  6. Ͳ͏͍͏ͱ͖ʹͭΒ͍ʁ w ͨ·ʹ$*͚ͩͰίέΔςετ w ͳʹΛͲ͏ςετͯ͠Δͷ͔Θ͔Βͳ͍ςετίʔυͷղ ಡ w ςετͷఆٛΛҰͭมߋͨ͠Βେྔͷ

  7. Ͳ͏͍͏ͱ͖ʹͭΒ͍ʁ w ͨ·ʹ$*͚ͩͰίέΔςετ w ͳʹΛͲ͏ςετͯ͠Δͷ͔Θ͔Βͳ͍ςετίʔυͷղ ಡ w ςετͷఆٛΛҰͭมߋͨ͠Βେྔͷ طଘͷςετίʔυ मਖ਼͕ͭΒ͍

  8. Ͳ͏͍͏ͱ͖ʹͭΒ͍ʁ w ͨ·ʹ$*͚ͩͰίέΔςετ w ͳʹΛͲ͏ςετͯ͠Δͷ͔Θ͔Βͳ͍ςετίʔυ w ఆٛΛҰͭมߋͨ͠Βେྔͷ A ࠓ೔࿩͢͜ͱ

  9. Մಡੑͷߴ͍ίʔυΛ मਖ਼͢ΔͳΒਏ͘ͳ͍͸ͣʜ

  10. 8F`SFOPUIJSJOH ҎલɺՄಡੑͷߴ͍ ςετίʔυͷॻ͖ํ ʹ͍ͭͯ࿩͠·ͨ͠ https://speakerdeck.com/willnet/clean-test-code

  11. 3BJMT%FWFMPQFST .FFUVQ ӫ͑͋ΔୈҰճ໨ʂ

  12. ൃද͔Β೥ܦͪ ಄͕੔ཧ͞Ε͖ͯͨͷͰ΋ͬ ͱ͍͍ײ͡ͷઆ໌͕Ͱ͖ͦ͏

  13. ͔͜͜Βຊ୊

  14. ࠓ೔͸$MFBO5FTU $PEF Մಡੑͷߴ͍ς ετίʔυ ʹ͍ͭͯ ࿩͠·͢

  15. Ͳ͏͍͏ঢ়ଶͩͱ ʮՄಡੑͷߴ͍ςετ ίʔυʯͱݴ͑Δͷ͔

  16. ཧ૝ͷ͕࢟Θ͔Βͳ͍ ͱमਖ਼͠Α͏͕ͳ͍ʜ

  17. ೴ʹෛ୲Λ͔͚ͳ͍ ςετίʔυ͸Մಡੑ ͕ߴ͍

  18. ๻ͨͪ͸ςετίʔυ ΛಡΉͱ͖ɺςετͷ ಺༰Λ೴಺ϝϞϦʹల ։͍ͯ͠Δ

  19. ೴಺ϝϞϦʹల։͍ͯ͠Δ ཁૉ w ςετͷ֓ཁ w ςετͷࣄલ৚݅ w खଓ͖ w ظ଴͍ͯ͠Δ݁Ռ

  20. αϯϓϧίʔυ

  21. ֓ཁ 6TFSGVMMOBNF͕੏ͱ໊Λ͋Θͤͨ΋ͷΛ ฦ͢͜ͱΛςετ͍ͯ͠Δ

  22. લఏ৚݅ pSTUOBNF͕`ਅҰ` MBTUOBNF͕`લౡ`ͷ 6TFSΦϒδΣΫτΛੜ੒͠ɺVTFSͰࢀরͰ͖ΔΑ͏ʹ͍ͯ͠Δ

  23. खଓ͖ VTFSGVMMOBNFΛ࣮ߦ͢Δ

  24. ظ଴͢Δ݁Ռ bલౡਅҰ`͕໭Γ஋ͱͯ͠ฦΔ

  25. ςετίʔυ͔Β ΁ͷϚοϐϯά

  26. ͜ΕΒΛ͢ΜͳΓల։͞ ͤͳ͍ཁૉ͕ଘࡏ͢Δ

  27. ೴ʹෛ୲Λ͔͚Δཁૉ Λഉআͨ͠ςετίʔ υ͸Մಡੑ͕ߴ͍

  28. ೴ʹෛ୲Λ͔͚Δཁૉ ͱ͸

  29. ೴ʹෛ୲Λ͔͚Δཁૉ w આ໌ෆ଍ w είʔϓʹϊΠζ͕͍ࠞͬͯ͟Δ w είʔϓͷඈͼ஍ w ҉໧తͳґଘ͕͋Δ w

    ఆٛΛ్தͰมߋ͢Δ
  30. આ໌ෆ଍

  31. આ໌ෆ଍ w EFTDSJCF DPOUFYU JUͷઆ໌͕ࡶɺ΋͘͠͸આ໌͕ͳ͍ w ςετͷ֓ཁ͕͙͢ʹ͔ͭΊͣɺ೴ͷϦιʔεΛফඅ͢Δ

  32. None
  33. EFTDSJCF΍DPOUFYU͕୯ޠ͚ͩ JUͷઆ໌͕লུ ͳʹΛͲ͏ςετ͍ͯ͠Δͷ͔͙͢ʹ͸Θ͔Βͳ͍

  34. None
  35. จষΛಡΉ͚ͩͰ ֓ཁ͕͙͢ʹΘ͔Δʂ

  36. ཧ૝͸EFTDSJCF  DPOUFYU JUΛಡΊ͹ςε τͷྲྀΕΛཧղͰ͖Δ͜ͱ

  37. ݱ৔ͷςετίʔυͰ͸ JUͷઆ໌͕লུ͞Ε͕ͪ

  38. ॻ͍ͨຊਓʹͱͬͯ͸ࣗ ໌͔΋͠Εͳ͍͚Ͳɺ ޙੈͷਓ͕ͭΒ͍ͷͰ ৄ͘͠ॻ͖·͠ΐ͏

  39. JUͷઆ໌Λলུͯ͠Α͍ͷ͸ɺϫϯϥΠφʔܗ ࣜͰ͔ͭTVCKFDUͱϚονϟ͕୯७ͳ΋ͷ͚ͩ

  40. ·ͱΊ ςετ͸આ໌͗͢͠ ͘Β͍Ͱͪΐ͏ͲΑ͍

  41. είʔϓʹϊΠζ͕ࠞ ͍ͬͯ͟Δ

  42. ͜͜Ͱ͍͏είʔϓͱ͸ ֘౰͢Δςετʹؔ܎͢Δ ϒϩοΫͷ͜ͱͰ͢

  43. ͷείʔϓ

  44. ͷείʔϓ

  45. ྫCͱDͰ͚ͩ࢖͏ ఆ͕ٛ͋Δ

  46. %3:ʹ͢ΔͨΊʹ Ұ্ͭʹҠಈ

  47. %3:ʹ͢ΔͨΊʹ Ұ্ͭʹҠಈ (

  48. %3:ʹ͢ΔͨΊʹ Ұ্ͭʹҠಈ ͜ͷఆٛ͸ࠓݟ͍ͯΔε ίʔϓͰ࢖ΘΕ͍ͯΔͷ ͔ʁ࢖ΘΕ͍ͯͳ͍ͷ ͔ʁͱ͍͏൑அ͕ඞཁʹ ͳΓ೴ͷϦιʔεΛফඅ ͢Δ

  49. MFUΛMFUʹ͢Δͱ஗ԆධՁͰ`B`ͷίϯς ΩετͰ͸࣮ߦ͞Εͳ͍͔ΒΑ͍ͷͰ͸ʁ

  50. MFUΛMFUʹ͢Δͱ஗ԆධՁͰ`B`ͷίϯς ΩετͰ͸࣮ߦ͞Εͳ͍͔ΒΑ͍ͷͰ͸ʁ (

  51. MFUΛMFUʹ͢Δͱ஗ԆධՁͰ`B`ͷίϯς ΩετͰ͸࣮ߦ͞Εͳ͍͔ΒΑ͍ͷͰ͸ʁ MFUͷ஗Ԇ࣮ߦʹΑͬͯϚ γϯ্Ͱ࣮ߦ͞Εͳͯ͘ ΋೴ͷϝϞϦ͸ফඅ͞Ε Δ

  52. MFUͱMFUͲͪΒͰ΋ ྑ͍৔߹͸MFU

  53. ·ͱΊ είʔϓʹ͸࢖͏΋ͷ ͚ͩΛఆٛ͢Δ

  54. είʔϓͷඈͼ஍

  55. None
  56. ΤσΟλΛεΫϩʔϧ ͍ͯ͠Δؒʹ೴಺ϝϞ Ϧ͕شൃ͕ͪ͠

  57. ͜ͷྫ͸͏·͍ ղܾࡦ͕ͳ͍ʼʻ ͋Μ·ΓͭΒ͍Α͏ͳΒ ωετΛ΍ΊΔͷ͕Αͦ͞͏

  58. None
  59. ผϑΝΠϧͷఆٛΛߦͬͨΓ དྷͨΓ͍ͯ͠Δؒʹ೴಺ϝϞ Ϧ͕شൃ͕ͪ͠

  60. ϑΝΠϧதͰ͔͠࢖͍ͬͯͳ͍ ϔϧύϝιουͳΒ͜͏͍ͨ͠

  61. ·ͱΊ είʔϓͷඈͼ஍ΛͰ͖Δݶ ΓݮΒ͢ɻ΍ΉΛಘͳ͍ͱ͖ ΋ͳΔ΂ۙ͘͘ʹ഑ஔ͢Δ

  62. ҉໧తͳґଘ

  63. TUBUVT͸SFBEZEPJOHEPOFͷҰํ޲͔͠ભҠͰ͖ͳ͍ ͦΕҎ֎ͷભҠΛ͠Α͏ͱͨ͠ΒΤϥʔͱ͍͏࢓༷

  64. None
  65. TUBUVTͷσϑΥϧτ͕SFBEZͰ͋Δ͜ͱʹґଘ͍ͯ͠Δ͕ɺ ςετίʔυ୯ମΛΈ͚ͨͩͰ͸ؾ͚ͮͳ͍

  66. TUBUVTͷσϑΥϧτ͕SFBEZͰ͋Δ͜ͱʹґଘ͍ͯ͠Δ͕ɺ ςετίʔυ୯ମΛΈ͚ͨͩͰ͸ؾ͚ͮͳ͍ ΋ͪΖΜςετέʔε͕଍Γͳ͍ ͱ͍͏ͷ΋͋Δ͚ͲͦΕ͸ஔ͍͓͍͍ͯͯͩ͘͞

  67. ςετίʔυதʹॻ͔Ε ͍ͯͳ͍҉໧తͳ৚݅ FY[email protected]ͷσ ϑΥϧτ஋ ʹґଘͨ͠ ίʔυΛॻ͘ͱɺࣄલ৚ ݅ͷ೺Ѳ͕೉͘͠ͳΔ

  68. ࣄલ৚݅Λਖ਼͘͠೺ѲͰ͖ ͳ͍ঢ়ଶͰςετίʔυΛ ॻ͘ͱɺಡΈͮΒ͍ෆ҆ఆ ͳςετίʔυʹͳΔ

  69. ΋ͪΖΜσϑΥϧτ஋Λ มߋͨ͠Βͱ͍͏ͷ΋͋Δ

  70. ඞཁͷͳ͍ϊΠζ

  71. ͋Δ΂͖࢟

  72. ͖ͬ͞΋ݴ͚ͬͨͲ େࣄͳ͜ͱͳͷͰ ΋͏Ұ౓

  73. ςετʹؔ܎͍ͯ͠Δ ஋Λɺςετίʔυ֎ ʹॻ͘ͱͭΒ͍

  74. ͭΒ͍

  75. ςετʹؔ܎͍ͯ͠Δ ஋Λɺςετίʔυ্ Ͱաෆ଍ͳ͘໌ࣔతʹ ࢦఆ͢ΔͱಡΈ΍͍͢

  76. ͜ͷதʹ͢΂ͯΛॻ͍͍ͯͩ͘͞ʂ

  77. ͱ͸͍͑ɺ 'BDUPSZ#PUͷσϑΥ ϧτ஋ʹґଘͨ͠ίʔ υ͸ॻ͍ͯ͠·͍͕ͪ

  78. ਪ঑ϓϥΫςΟε ʮσϑΥϧτ஋Λϥϯ μϜʹ͢Δʯ

  79. ඞཁͳ஋ͷઃఆʹෆ଍͕͋Δͱ ͱ͖Ͳ͖ςετ͕ίέΔΑ͏ʹͳΔ

  80. 2ϥϯμϜʹ͢Δͱ ςετ͕ίέͨͱ͖ʹ ࠶ݱͰ͖ͳ͘ͳ͍ʁ

  81. "ςετ͕ίέͨͱ͖ ͸ASTQFDŠTFFE AͷΑ͏ʹTFFE ஋Λࢦఆ͢Δͱ࠶ݱͰ ͖Δ

  82. ·ͱΊ ςετʹؔ࿈͍ͯ͠Δ஋ ΛͳΔ΂͘ςετίʔυ ಺ʹدͤͯදݱ͢Δɻա ෆ଍͕ͳ͍Α͏ʹ͢Δ

  83. ఆٛΛ్தͰมߋ͢Δ

  84. None
  85. ҉໧ͷґଘ

  86. ͜Εʹґଘͨ͠ςετίʔυ͕͢Ͱʹଘࡏ͢Δͱ ͜ͷఆٛΛมߋ͠ʹ͘͘ͳΔ

  87. ґଘΛͦͷ··࢖ͬͯ ແཧ΍ΓςετΛॻ͍ͨྫ

  88. σϑΥϧτ஋͕໌ࣔతͰͳ͍ ͷͰɺGBDUPSZͷϑΝΠϧͱ ςετͷϑΝΠϧΛߦͬͨΓདྷͨΓ ͢Δඞཁ͕͋Δ

  89. ಈతʹσϑΥϧτ஋Λ ม͑Δͱ࠷ऴతͳ஋͕ ෼͔ΓͮΒ͘ͳΔ

  90. USBJUΛ࢖͍ɺσϑΥϧτͰ͸ QPTU͕࡞ΒΕͳ͍Α͏ʹมߋ

  91. ґଘ͍ͯ͠Δ΋ͷΛ໌ࣔతʹͯ͠ ςετίʔυຊମʹॻ͘͜ͱ͕Ͱ͖ͨ

  92. ྫΛ΋͏গ͠

  93. None
  94. ֎ଆͷείʔϓͰఆٛͨ͠QPTUΛVQEBUF͍ͯ͠ΔͷͰɺ ೴಺NFSHF͕ඞཁ

  95. ͦΕͧΕͷείʔϓͰ໌ࣔతʹQPTUΛఆٛͨ͠΄͏͕ Θ͔Γ΍͍͢

  96. None
  97. ֎ଆͷMFUͰఆٛͨ͠[email protected]Λ্ॻ͖ͨ͠Γ ͍ͯ͠ͳ͔ͬͨΓ͢ΔͷͰɺ೴಺ϑΟϧλϦϯά͕ඞཁ

  98. σϑΥϧτͷMFUΛ΍Ίͯ ͦΕͧΕͷDPOUFYUͰ໌ࣔతʹఆٛ͢Δͱ ೴಺ϑΟϧλϦϯά͕ෆཁʹͳΔ

  99. ֎ଆͷείʔϓͰఆٛ ͨ͠΋ͷΛ಺ଆͷε ίʔϓͰߋ৽͢Δͱ೴ ʹෛ୲͕͔͔Δ

  100. ·ͱΊ ςετͷલఏ৚݅Λ্ ॻ͖ͨ͠Γमਖ਼ͨ͠Γ ͠ͳ͍

  101. ೴ʹෛ୲Λ͔͚Δཁૉ ʹ͍ͭͯҰ௨Γ࿩ͨ͠

  102. ೴ʹෛ୲Λ͔͚Δཁૉ ࠶ܝ w આ໌ෆ଍ w είʔϓʹϊΠζ͕͍ࠞͬͯ͟Δ w είʔϓͷඈͼ஍ w ҉໧తͳґଘ͕͋Δ

    w ఆٛΛ్தͰมߋ͢Δ
  103. ೴ʹෛ୲Λ͔͚Δཁૉ Λෳ਺ؚΈ͕ͪͳ΋ͷ ͕͋Δ

  104. ͦΕ͸ʜ

  105. [email protected] [email protected]

  106. ͜ΕͰۤ͠ΜͩPS ۤ͠ΜͰ͍Δਓ✋

  107. %3:ʹ͍ͨ͠ཉٻ͕ TIBSFE଒Λঌש͢Δ

  108. TIBSFE଒Λ࢖͏ͳ Βɺ͜Ε·Ͱ࿩ͨ͠ϓ ϥΫςΟεΛͰ͖Δ͔ ͗Γ੝ΓࠐΈ·͠ΐ͏

  109. None
  110. આ໌͕଍Γͳ͍

  111. Ṗͷґଘؔ܎

  112. [email protected]ͷఆٛͱ ςετίʔυΛߦͬͨΓདྷͨ Γͯ͠ɺ೴಺Ͱ ʮ[email protected]Λ࢖Θ ͳ͔ͬͨͱ͖ͷίʔυʯʹม ׵͠ͳ͍ͱͳʹ΋Θ͔Βͳ͍

  113. मਖ਼Ҋ

  114. આ໌Λৄͯ͘͠͠ ςετίʔυ಺͚ͩͰ֓ཁΛ͔ͭΊΔΑ͏ʹͨ͠

  115. ͔͠͠Ҿ਺ʹظ଴͢Δ݁ՌΛ౉ͯ͠ಈతʹJUͷ಺༰Λมߋ͢Δ ͱ͍͏͜ͱࣗମ͕ՄಡੑΛଛͶ͍ͯΔ ݁ہఆٛΛಡΜͰ೴಺Ϛʔδͷඞཁ͕͋Δ

  116. ΂ͨॻ͖ʹͯ͠Έͨ

  117. ݟ΍͘͢ͳ͕ͬͨ ιʔείʔυߦ਺͸૿͑ͨ

  118. όϥϯεΛ ߟ͑·͠ΐ͏

  119. Լखʹ෼͚Δ͘Β͍ͳ ΒίϐϖͰ΂ͨॻ͖ͷ ΄͏͕ίετ௿͍Ͱ͢

  120. શମͷ·ͱΊ w Մಡੑͷߴ͍ςετͷॻ͖ํʹ͍ͭͯઆ໌͠·ͨ͠ w ςετίʔυ͸ΞϓϦέʔγϣϯίʔυͱͪΐͬͱ͚͓ͩ ࡞๏͕ҧ͏ w ΞϓϦέʔγϣϯίʔυ΄ͲՄಡੑ͕ߟྀ͞Ε͍ͯͳ͍ง ғؾ w

    ςετίʔυ΋ΞϓϦέʔγϣϯΛߏ੒͢ΔίʔυͷҰ෦ ͳͷͰɺಡΈ΍͍͢ίʔυʹ͍͖ͯ͠·͠ΐ͏Ͷ
  121. ͕࣌ؒ༨ͬͨΒ ࣗݾ঺հ

  122. Shinichi Maeshima ! " # @netwillnet @willnet http://blog.willnet.in Willnet Inc.

  123. 3BJMT%. ͨ͘͞Μొஃ͍ͯ͠·͢ • Rails Developers Meetup #1 • Rails Developers

    Meetup 2017 • Rails Developers Meetup 2018 Day2 • Rails Developers Meetup 2018 Day3 Extreme • Rails Developers Meetup 2019 ← New!
  124. ٕज़ސ໰ۀΛ͍ͯ͠·͢

  125. ͓࢓ࣄ4/4తͳ΋ͷΛ։ൃ ͍ͯ͠·͢

  126. 8F`SFOPUIJSJOH

  127. ސ໰ઌ΋ ืू͍ͯ͠·ͤΜ

  128. ͰԥΔ༻ҙͷ͋Δ ձࣾ͞Μ͸ྫ֎ͳͷͰ ͓੠͕͚͍ͩ͘͞

  129. )BQQZ5FTUJOH