Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Clean Test Code Revised
Search
Shinichi Maeshima
March 23, 2019
Technology
33
17k
Clean Test Code Revised
Rails Developer Meetup 2019での発表資料です!可読性の高いテストコードを書くためのコツについて話しました
Shinichi Maeshima
March 23, 2019
Tweet
Share
More Decks by Shinichi Maeshima
See All by Shinichi Maeshima
Exceptional Rails
willnet
6
5.9k
Breaking the Flaky Test Cycle
willnet
2
1.7k
mrskで広がるインフラの選択肢
willnet
1
880
アプリケーションを長期にわたって無理なく運用するためのたったひとつの方法
willnet
2
2k
HotwireからDHHが考えるこれからのRailsとJSの付き合い方を知る
willnet
14
12k
Rails6.1で新しく入る機能について
willnet
12
15k
Concerns about Concerns
willnet
11
33k
個人でつくるwebサービス
willnet
13
9.7k
RubyGems入門
willnet
2
3.7k
Other Decks in Technology
See All in Technology
パフォーマンス最適化のベストプラクティス
databricksjapan
0
200
LLM評価の落とし穴~開発者目線で気をつけるポイント~
rishigami
11
3.3k
個人的、Kubernetes の最新注目機能! (2024年5月版) / TechFeed Experts Night#28 〜 コンテナ技術最前線
pfn
PRO
3
210
Real World Type Puzzle and Code Generation
yukukotani
4
640
20240509 CloudWatch でいろいろなものを監視してみよう
masaruogura
1
120
社内での継続的な機械学習勉強会の開催のコツ
yudai00
2
390
OpenID Foundation updates
fujie
0
120
From here to resilience - a travel guide
ufried
1
160
複雑なビジネスルールに挑む:正確性と効率性を両立するfp-tsのチーム活用術 / Strike a balance between correctness and efficiency with fp-ts
kakehashi
5
3.6k
#phpconkagawa レガシーコードにもオブザーバビリティを 〜少しずつ始めるサービス監視〜
yamato_sorariku
0
560
PhpStorm超絶技巧40分集中講義 #phpconkagawa
yusuke
4
780
スクラムに出会って「できた」を実感できるようになってきた話 / Scrum makes me feel like I can do it
yayoi_dd
2
110
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
228
130k
The MySQL Ecosystem @ GitHub 2015
samlambert
244
12k
Making Projects Easy
brettharned
109
5.5k
Stop Working from a Prison Cell
hatefulcrawdad
266
19k
Designing for Performance
lara
601
67k
Into the Great Unknown - MozCon
thekraken
15
1.1k
In The Pink: A Labor of Love
frogandcode
138
21k
RailsConf 2023
tenderlove
9
580
Why Our Code Smells
bkeepers
PRO
331
56k
It's Worth the Effort
3n
180
27k
From Idea to $5000 a Month in 5 Months
shpigford
377
45k
The Cost Of JavaScript in 2023
addyosmani
21
4k
Transcript
Clean Test Code Revised @willnet
Έͳ͞Μ ςετॻ͍ͯ·͔͢ʁ
͜͜Ͱશһख্͕͕ Δ༧ఆ✋
ςετॻ͘ͷָ͍͠ ਓʁ
͜͜Ͱશһ͕Λ෬ ͤΔ༧ఆ
Ͳ͏͍͏ͱ͖ʹͭΒ͍ʁ w ͨ·ʹ$*͚ͩͰίέΔςετ w ͳʹΛͲ͏ςετͯ͠Δͷ͔Θ͔Βͳ͍ςετίʔυͷղ ಡ w ςετͷఆٛΛҰͭมߋͨ͠Βେྔͷ
Ͳ͏͍͏ͱ͖ʹͭΒ͍ʁ w ͨ·ʹ$*͚ͩͰίέΔςετ w ͳʹΛͲ͏ςετͯ͠Δͷ͔Θ͔Βͳ͍ςετίʔυͷղ ಡ w ςετͷఆٛΛҰͭมߋͨ͠Βେྔͷ طଘͷςετίʔυ मਖ਼͕ͭΒ͍
Ͳ͏͍͏ͱ͖ʹͭΒ͍ʁ w ͨ·ʹ$*͚ͩͰίέΔςετ w ͳʹΛͲ͏ςετͯ͠Δͷ͔Θ͔Βͳ͍ςετίʔυ w ఆٛΛҰͭมߋͨ͠Βେྔͷ A ࠓ͢͜ͱ
Մಡੑͷߴ͍ίʔυΛ मਖ਼͢ΔͳΒਏ͘ͳ͍ͣʜ
8F`SFOPUIJSJOH ҎલɺՄಡੑͷߴ͍ ςετίʔυͷॻ͖ํ ʹ͍ͭͯ͠·ͨ͠ https://speakerdeck.com/willnet/clean-test-code
3BJMT%FWFMPQFST .FFUVQ ӫ͑͋ΔୈҰճʂ
ൃද͔Βܦͪ ಄͕ཧ͞Ε͖ͯͨͷͰͬ ͱ͍͍ײ͡ͷઆ໌͕Ͱ͖ͦ͏
͔͜͜Βຊ
ࠓ$MFBO5FTU $PEF Մಡੑͷߴ͍ς ετίʔυ ʹ͍ͭͯ ͠·͢
Ͳ͏͍͏ঢ়ଶͩͱ ʮՄಡੑͷߴ͍ςετ ίʔυʯͱݴ͑Δͷ͔
ཧͷ͕࢟Θ͔Βͳ͍ ͱमਖ਼͠Α͏͕ͳ͍ʜ
ʹෛ୲Λ͔͚ͳ͍ ςετίʔυՄಡੑ ͕ߴ͍
ͨͪςετίʔυ ΛಡΉͱ͖ɺςετͷ ༰ΛϝϞϦʹల ։͍ͯ͠Δ
ϝϞϦʹల։͍ͯ͠Δ ཁૉ w ςετͷ֓ཁ w ςετͷࣄલ݅ w खଓ͖ w ظ͍ͯ͠Δ݁Ռ
αϯϓϧίʔυ
֓ཁ 6TFSGVMMOBNF͕ͱ໊Λ͋ΘͤͨͷΛ ฦ͢͜ͱΛςετ͍ͯ͠Δ
લఏ݅ pSTUOBNF͕`ਅҰ` MBTUOBNF͕`લౡ`ͷ 6TFSΦϒδΣΫτΛੜ͠ɺVTFSͰࢀরͰ͖ΔΑ͏ʹ͍ͯ͠Δ
खଓ͖ VTFSGVMMOBNFΛ࣮ߦ͢Δ
ظ͢Δ݁Ռ bલౡਅҰ`͕Γͱͯ͠ฦΔ
ςετίʔυ͔Β ͷϚοϐϯά
͜ΕΒΛ͢ΜͳΓల։͞ ͤͳ͍ཁૉ͕ଘࡏ͢Δ
ʹෛ୲Λ͔͚Δཁૉ Λഉআͨ͠ςετίʔ υՄಡੑ͕ߴ͍
ʹෛ୲Λ͔͚Δཁૉ ͱ
ʹෛ୲Λ͔͚Δཁૉ w આ໌ෆ w είʔϓʹϊΠζ͕͍ࠞͬͯ͟Δ w είʔϓͷඈͼ w ҉తͳґଘ͕͋Δ w
ఆٛΛ్தͰมߋ͢Δ
આ໌ෆ
આ໌ෆ w EFTDSJCF DPOUFYU JUͷઆ໌͕ࡶɺ͘͠આ໌͕ͳ͍ w ςετͷ֓ཁ͕͙͢ʹ͔ͭΊͣɺͷϦιʔεΛফඅ͢Δ
None
EFTDSJCFDPOUFYU͕୯ޠ͚ͩ JUͷઆ໌͕লུ ͳʹΛͲ͏ςετ͍ͯ͠Δͷ͔͙͢ʹΘ͔Βͳ͍
None
จষΛಡΉ͚ͩͰ ֓ཁ͕͙͢ʹΘ͔Δʂ
ཧEFTDSJCF DPOUFYU JUΛಡΊςε τͷྲྀΕΛཧղͰ͖Δ͜ͱ
ݱͷςετίʔυͰ JUͷઆ໌͕লུ͞Ε͕ͪ
ॻ͍ͨຊਓʹͱͬͯࣗ ໌͔͠Εͳ͍͚Ͳɺ ޙੈͷਓ͕ͭΒ͍ͷͰ ৄ͘͠ॻ͖·͠ΐ͏
JUͷઆ໌Λলུͯ͠Α͍ͷɺϫϯϥΠφʔܗ ࣜͰ͔ͭTVCKFDUͱϚονϟ͕୯७ͳͷ͚ͩ
·ͱΊ ςετઆ໌͗͢͠ ͘Β͍Ͱͪΐ͏ͲΑ͍
είʔϓʹϊΠζ͕ࠞ ͍ͬͯ͟Δ
͜͜Ͱ͍͏είʔϓͱ ֘͢Δςετʹؔ͢Δ ϒϩοΫͷ͜ͱͰ͢
ͷείʔϓ
ͷείʔϓ
ྫCͱDͰ͚ͩ͏ ఆ͕ٛ͋Δ
%3:ʹ͢ΔͨΊʹ Ұ্ͭʹҠಈ
%3:ʹ͢ΔͨΊʹ Ұ্ͭʹҠಈ (
%3:ʹ͢ΔͨΊʹ Ұ্ͭʹҠಈ ͜ͷఆٛࠓݟ͍ͯΔε ίʔϓͰΘΕ͍ͯΔͷ ͔ʁΘΕ͍ͯͳ͍ͷ ͔ʁͱ͍͏அ͕ඞཁʹ ͳΓͷϦιʔεΛফඅ ͢Δ
MFUΛMFUʹ͢ΔͱԆධՁͰ`B`ͷίϯς ΩετͰ࣮ߦ͞Εͳ͍͔ΒΑ͍ͷͰʁ
MFUΛMFUʹ͢ΔͱԆධՁͰ`B`ͷίϯς ΩετͰ࣮ߦ͞Εͳ͍͔ΒΑ͍ͷͰʁ (
MFUΛMFUʹ͢ΔͱԆධՁͰ`B`ͷίϯς ΩετͰ࣮ߦ͞Εͳ͍͔ΒΑ͍ͷͰʁ MFUͷԆ࣮ߦʹΑͬͯϚ γϯ্Ͱ࣮ߦ͞Εͳͯ͘ ͷϝϞϦফඅ͞Ε Δ
MFUͱMFUͲͪΒͰ ྑ͍߹MFU
·ͱΊ είʔϓʹ͏ͷ ͚ͩΛఆٛ͢Δ
είʔϓͷඈͼ
None
ΤσΟλΛεΫϩʔϧ ͍ͯ͠ΔؒʹϝϞ Ϧ͕شൃ͕ͪ͠
͜ͷྫ͏·͍ ղܾࡦ͕ͳ͍ʼʻ ͋Μ·ΓͭΒ͍Α͏ͳΒ ωετΛΊΔͷ͕Αͦ͞͏
None
ผϑΝΠϧͷఆٛΛߦͬͨΓ དྷͨΓ͍ͯ͠ΔؒʹϝϞ Ϧ͕شൃ͕ͪ͠
ϑΝΠϧதͰ͔͍ͬͯ͠ͳ͍ ϔϧύϝιουͳΒ͜͏͍ͨ͠
·ͱΊ είʔϓͷඈͼΛͰ͖Δݶ ΓݮΒ͢ɻΉΛಘͳ͍ͱ͖ ͳΔۙ͘͘ʹஔ͢Δ
҉తͳґଘ
TUBUVTSFBEZEPJOHEPOFͷҰํ͔͠ભҠͰ͖ͳ͍ ͦΕҎ֎ͷભҠΛ͠Α͏ͱͨ͠ΒΤϥʔͱ͍͏༷
None
TUBUVTͷσϑΥϧτ͕SFBEZͰ͋Δ͜ͱʹґଘ͍ͯ͠Δ͕ɺ ςετίʔυ୯ମΛΈ͚ͨͩͰؾ͚ͮͳ͍
TUBUVTͷσϑΥϧτ͕SFBEZͰ͋Δ͜ͱʹґଘ͍ͯ͠Δ͕ɺ ςετίʔυ୯ମΛΈ͚ͨͩͰؾ͚ͮͳ͍ ͪΖΜςετέʔε͕Γͳ͍ ͱ͍͏ͷ͋Δ͚ͲͦΕஔ͍͓͍͍ͯͯͩ͘͞
ςετίʔυதʹॻ͔Ε ͍ͯͳ͍҉తͳ݅ FYGBDUPSZ@CPUͷσ ϑΥϧτ ʹґଘͨ͠ ίʔυΛॻ͘ͱɺࣄલ ݅ͷѲ͕͘͠ͳΔ
ࣄલ݅Λਖ਼͘͠ѲͰ͖ ͳ͍ঢ়ଶͰςετίʔυΛ ॻ͘ͱɺಡΈͮΒ͍ෆ҆ఆ ͳςετίʔυʹͳΔ
ͪΖΜσϑΥϧτΛ มߋͨ͠Βͱ͍͏ͷ͋Δ
ඞཁͷͳ͍ϊΠζ
͋Δ͖࢟
͖ͬ͞ݴ͚ͬͨͲ େࣄͳ͜ͱͳͷͰ ͏Ұ
ςετʹ͍ؔͯ͠Δ Λɺςετίʔυ֎ ʹॻ͘ͱͭΒ͍
ͭΒ͍
ςετʹ͍ؔͯ͠Δ Λɺςετίʔυ্ Ͱաෆͳ͘໌ࣔతʹ ࢦఆ͢ΔͱಡΈ͍͢
͜ͷதʹͯ͢Λॻ͍͍ͯͩ͘͞ʂ
ͱ͍͑ɺ 'BDUPSZ#PUͷσϑΥ ϧτʹґଘͨ͠ίʔ υॻ͍ͯ͠·͍͕ͪ
ਪϓϥΫςΟε ʮσϑΥϧτΛϥϯ μϜʹ͢Δʯ
ඞཁͳͷઃఆʹෆ͕͋Δͱ ͱ͖Ͳ͖ςετ͕ίέΔΑ͏ʹͳΔ
2ϥϯμϜʹ͢Δͱ ςετ͕ίέͨͱ͖ʹ ࠶ݱͰ͖ͳ͘ͳ͍ʁ
"ςετ͕ίέͨͱ͖ ASTQFDTFFE AͷΑ͏ʹTFFE Λࢦఆ͢Δͱ࠶ݱͰ ͖Δ
·ͱΊ ςετʹؔ࿈͍ͯ͠Δ ΛͳΔ͘ςετίʔυ ʹدͤͯදݱ͢Δɻա ෆ͕ͳ͍Α͏ʹ͢Δ
ఆٛΛ్தͰมߋ͢Δ
None
҉ͷґଘ
͜Εʹґଘͨ͠ςετίʔυ͕͢Ͱʹଘࡏ͢Δͱ ͜ͷఆٛΛมߋ͠ʹ͘͘ͳΔ
ґଘΛͦͷ··ͬͯ ແཧΓςετΛॻ͍ͨྫ
σϑΥϧτ͕໌ࣔతͰͳ͍ ͷͰɺGBDUPSZͷϑΝΠϧͱ ςετͷϑΝΠϧΛߦͬͨΓདྷͨΓ ͢Δඞཁ͕͋Δ
ಈతʹσϑΥϧτΛ ม͑Δͱ࠷ऴతͳ͕ ͔ΓͮΒ͘ͳΔ
USBJUΛ͍ɺσϑΥϧτͰ QPTU͕࡞ΒΕͳ͍Α͏ʹมߋ
ґଘ͍ͯ͠ΔͷΛ໌ࣔతʹͯ͠ ςετίʔυຊମʹॻ͘͜ͱ͕Ͱ͖ͨ
ྫΛ͏গ͠
None
֎ଆͷείʔϓͰఆٛͨ͠QPTUΛVQEBUF͍ͯ͠ΔͷͰɺ NFSHF͕ඞཁ
ͦΕͧΕͷείʔϓͰ໌ࣔతʹQPTUΛఆٛͨ͠΄͏͕ Θ͔Γ͍͢
None
֎ଆͷMFUͰఆٛͨ͠QVCMJTI@BUΛ্ॻ͖ͨ͠Γ ͍ͯ͠ͳ͔ͬͨΓ͢ΔͷͰɺϑΟϧλϦϯά͕ඞཁ
σϑΥϧτͷMFUΛΊͯ ͦΕͧΕͷDPOUFYUͰ໌ࣔతʹఆٛ͢Δͱ ϑΟϧλϦϯά͕ෆཁʹͳΔ
֎ଆͷείʔϓͰఆٛ ͨ͠ͷΛଆͷε ίʔϓͰߋ৽͢Δͱ ʹෛ୲͕͔͔Δ
·ͱΊ ςετͷલఏ݅Λ্ ॻ͖ͨ͠Γमਖ਼ͨ͠Γ ͠ͳ͍
ʹෛ୲Λ͔͚Δཁૉ ʹ͍ͭͯҰ௨Γͨ͠
ʹෛ୲Λ͔͚Δཁૉ ࠶ܝ w આ໌ෆ w είʔϓʹϊΠζ͕͍ࠞͬͯ͟Δ w είʔϓͷඈͼ w ҉తͳґଘ͕͋Δ
w ఆٛΛ్தͰมߋ͢Δ
ʹෛ୲Λ͔͚Δཁૉ ΛෳؚΈ͕ͪͳͷ ͕͋Δ
ͦΕʜ
TIBSFE@DPOUFYU TIBSFE@FYBNQMFT
͜ΕͰۤ͠ΜͩPS ۤ͠ΜͰ͍Δਓ✋
%3:ʹ͍ͨ͠ཉٻ͕ TIBSFEΛঌש͢Δ
TIBSFEΛ͏ͳ Βɺ͜Ε·Ͱͨ͠ϓ ϥΫςΟεΛͰ͖Δ͔ ͗ΓΓࠐΈ·͠ΐ͏
None
આ໌͕Γͳ͍
Ṗͷґଘؔ
TIBSFE@FYBNQMFTͷఆٛͱ ςετίʔυΛߦͬͨΓདྷͨ Γͯ͠ɺͰ ʮTIBSFE@FYBNQMFTΛΘ ͳ͔ͬͨͱ͖ͷίʔυʯʹม ͠ͳ͍ͱͳʹΘ͔Βͳ͍
मਖ਼Ҋ
આ໌Λৄͯ͘͠͠ ςετίʔυ͚ͩͰ֓ཁΛ͔ͭΊΔΑ͏ʹͨ͠
͔͠͠Ҿʹظ͢Δ݁ՌΛͯ͠ಈతʹJUͷ༰Λมߋ͢Δ ͱ͍͏͜ͱࣗମ͕ՄಡੑΛଛͶ͍ͯΔ ݁ہఆٛΛಡΜͰϚʔδͷඞཁ͕͋Δ
ͨॻ͖ʹͯ͠Έͨ
ݟ͘͢ͳ͕ͬͨ ιʔείʔυߦ૿͑ͨ
όϥϯεΛ ߟ͑·͠ΐ͏
Լखʹ͚Δ͘Β͍ͳ ΒίϐϖͰͨॻ͖ͷ ΄͏͕ίετ͍Ͱ͢
શମͷ·ͱΊ w Մಡੑͷߴ͍ςετͷॻ͖ํʹ͍ͭͯઆ໌͠·ͨ͠ w ςετίʔυΞϓϦέʔγϣϯίʔυͱͪΐͬͱ͚͓ͩ ࡞๏͕ҧ͏ w ΞϓϦέʔγϣϯίʔυ΄ͲՄಡੑ͕ߟྀ͞Ε͍ͯͳ͍ง ғؾ w
ςετίʔυΞϓϦέʔγϣϯΛߏ͢ΔίʔυͷҰ෦ ͳͷͰɺಡΈ͍͢ίʔυʹ͍͖ͯ͠·͠ΐ͏Ͷ
͕࣌ؒ༨ͬͨΒ ࣗݾհ
Shinichi Maeshima ! " # @netwillnet @willnet http://blog.willnet.in Willnet Inc.
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!
ٕज़ސۀΛ͍ͯ͠·͢
͓ࣄ4/4తͳͷΛ։ൃ ͍ͯ͠·͢
8F`SFOPUIJSJOH
ސઌ ืू͍ͯ͠·ͤΜ
ͰԥΔ༻ҙͷ͋Δ ձࣾ͞Μྫ֎ͳͷͰ ͓͕͚͍ͩ͘͞
)BQQZ5FTUJOH