Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
【Go言語】テスト
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Tomoki Ota
October 10, 2024
Programming
100
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【Go言語】テスト
Goのテストについて解説しています。
Tomoki Ota
October 10, 2024
More Decks by Tomoki Ota
See All by Tomoki Ota
アーキテクチャの価値
tomo1227
0
130
アーキテクチャとビジネスロジック
tomo1227
0
130
【Go言語】クロージャ
tomo1227
0
350
【Go言語】イテレータ
tomo1227
0
120
【Go言語】エラーハンドリング
tomo1227
0
100
AIに淘汰されないようにするには?
tomo1227
0
110
【Go言語】range
tomo1227
0
110
【Go言語】break
tomo1227
0
110
【Go言語】反復処理
tomo1227
0
87
Other Decks in Programming
See All in Programming
AIエージェント時代のコードレビューを設計する
nogu66
6
2.7k
A2UI for Android: Safely Rendering AI-Generated UI with Jetpack Compose - DroidKaigi 2026
itsmedreamwalker
0
120
Go のフラットな パッケージに 「ファイル単位の private」を 〜Linter “declscope” を作った話〜
mpyw
0
260
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
200
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
540
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
990
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
450
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
150
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
140
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
330
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
4.3k
Featured
See All Featured
Test your architecture with Archunit
thirion
2
2.4k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
610
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
A designer walks into a library…
pauljervisheath
211
25k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
240
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
690
Heart Work Chapter 1 - Part 1
lfama
PRO
9
36k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
840
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Transcript
Tomoki Ota ʲGoݴޠʳςετ
ςετͷྨ go:build γϣʔτϞʔυ -race ςετ࣮ߦϞʔυ ςʔϒϧۦಈςετ setup & teardown Fuzzing
ΞδΣϯμ 2
ςετͷྨ
ςετͷछྨ 4 ෳࡶɾ͍ɾܾఆੑ ؆୯ɾ͍ɾܾఆੑߴ
E2Eςετ 5 •γεςϜશମͷςετ •Ϣʔεέʔεςετ(Ϣʔβࢹ) •stagingڥͳͲͰςετ͢Δ
౷߹ςετ 6 •αʔϏεʗίϯϙʔωϯτؒͷ૬ޓ࡞༻Λ ςετ͢Δ •γφϦΦςετ •ϞοΫαʔόͳͲΛ༻͍ͯςετ͢Δ
ϗϫΠτϘοΫεςετ 7 • ػೳͷϩδοΫೖग़ྗΛϕʔεʹςετ͢Δ • ͯ͢ͷϓϩάϥϜ͕ҙਤͨ͠ͱ͓Γʹಈ࡞͍ͯ͠Δ͔Λ֬ೝ͢Δ • ੜ࢈ऀଆࢹͷςετ
ϒϥοΫϘοΫεςετ 8 • ػೳͷ࣮ࡍͷৼΔ͍Λϕʔεʹςετ͢Δ • γεςϜࣗମͷ༷Λຬ͍ͨͯ͠Δ͔Ͳ͏͔Λ֬ೝ͢Δ • ΫϥΠΞϯτଆͷςετ
ςετύοέʔδ
ςετύοέʔδ໊ʹ_testΛ͚ͭΔ͖͔ʁ 10 • _testΛ͚ͭͳ͍ : ϗϫΠτϘοΫεςετ • _testΛ͚ͭΔ : ϒϥοΫϘοΫεςετ
ͱଏʹݴΘΕͯΔ͚Ͳ… _testΛ͚ͭͳ͍ํ͕Α͘ݟ͑Δ
ςετύοέʔδ໊ʹ_testΛ͚ͭΔ͖͔ʁ 11 • _testΛ͚ͭͳ͍ : ϓϥΠϕʔτؔͷςετ͕Ͱ͖Δ • _testΛ͚ͭΔ : ϓϥΠϕʔτؔͷςετ͕Ͱ͖Δ
ͦͦprivateؔΛςετ͖͔͢ʁ 12
݁ 13 ͪΌΜͱૄ݁߹ͳίʔυΛॻ͍͍ͯΕ privateͳؔΛςετ͢Δඞཁ΄ͱΜͲͳ͍
14
go:build
go:buildͱʁ 16 ϏϧυλάͱݺΕɺGoϑΝΠϧͷઌ಄ʹ͋Δಛผͳίϝϯτ Build Constraints ͱݺΕΔ ͪͳΈʹGo1.17ҎલͰ //go:build Ͱͳ͘ɺ //+buildͩͬͨ
go:buildͱʁ 17 ۭߦ͕ඞཁ
go:buildͱʁ 18 ۭߦ͕ඞཁ εϖʔεෆཁ
go:buildͱʁ 19 ಛఆͷϑΝΠϧͷΈΛࢦఆͯ͠Ϗϧυ͍ͨ͠ͱ͖ʹ༻͢Δ
go:buildͱʁ 20 cgo͕༗ޮͳ߹ʹͷΈbuild͢Δ
go:buildͱʁ 21 WindowsͰͷΈϏϧυ͞ΕΔ
ϏϧυΦϓγϣϯ 22 windowsҎ֎ʹGOOSGOARCHʹࢦఆͰ͖ΔΞʔΩςΫνϟɺcgoɺίϯύΠϥɺ goͷϝδϟʔόʔδϣϯΛࢦఆͰ͖Δɻྫ͑ओͳྫΛڍ͛ΔͱҎԼͷΑ͏ͳͷ͕͋Δɻ
ϏϧυΦϓγϣϯ 23 • windows, linux, darwin • unix • ignore(ͦͷଞಠࣗͷΧελϜλάͰՄೳ)
: build࣌ʹແࢹ͍ͨ͠ͱ͖ • cgo : CGO_ENABLED͕1ͷͱ͖ʹbuildରͱͳΔ • linux • unix • darwin • go1.22 (ϚΠφʔόʔδϣϯࢦఆͰ͖ͳ͍) • gc, gccgo • android, ios • arm,arm.5, arm.6, arm.7 • amd64, amd64.v1, amd64.v2, amd64.v3 • mips64x, ppc64x, wasm
Ϗϧυλά༻࣌ͷҙ 24 go build main.goͷΑ͏ʹςετϑΝΠϧΛࢦఆͯ͠ɺϏϧυͨ͠ͱ͖ Ϗϧυλάʹؔͳ͘ɺϏϧυ͞ΕΔɻ
Ϗϧυλάͷԋࢉࢠ 25 ϏϧυλάͰ&&, || , !ԋࢉࢠ͕ར༻Ͱ͖Δ
Ϗϧυλάͷԋࢉࢠ 26 cgo͕ར༻Ͱ͖ͯɺlinux·ͨɺdarwinͰ͋Δ࣌ʹϏϧυ͞ΕΔ
ϏϧυλάʹΑΔςετͷྨ 27 ݁߹ςετͱ୯ମςετΛ͚͍ͨͱ͖ ౷߹ςετରʹ্هͷΑ͏ͳϏϧυλάΛ͚ͭΔ
ϏϧυλάʹΑΔςετͷྨ 28 1. ౷߹ςετରʹϏϧυλάintegrationΛ͚ͭΔ 2. ݁߹ςετͰಈ͔ͨ͘͠ͳ͍୯ମςετରͷϑΝΠϧʹ !integration ͷϏϧυλάΛࢦఆͯ͠ແޮʹ͢Δ 3. ݁߹ςετͱ୯ମςετΛ͚͍ͨͱ͖ͷྫ
ϏϧυλάʹΑΔςετͷྨ 29 ݁߹ςετͰಈ͔ͨ͘͠ͳ͍୯ମςετରͷϑΝΠϧʹ ! ͷϏϧυλάΛࢦఆͯ͠ແޮʹ͢Δ
ϏϧυλάʹΑΔςετͷྨ 30 tagΛࢦఆͯ͠ςετΛ࣮ߦ͢Δ
ϏϧυλάʹΑΔςετͷྨͷҙ 31 1. //go:build !integration Λ͚ͭͳ͍ͱɺgo test -tags=integration Ͱ λά͕͍͍ͭͯͳ͍ͷ࣮ߦ͞ΕΔɻ
2. ϏϧυλάͰςετΛεΩοϓͨ͠ࡍɺͲͷςετ͕εΩοϓ͞Ε͔ͨ ग़ྗ͞Εͳ͍ → ڥมΛ༻͢Δͱग़ྗͰ͖Δ
ڥมʹΑΔεΩοϓͷग़ྗ 32 ڥมINTEGRATION͕trueʹͳ͍ͬͯΔ߹ɺςετΛεΩοϓ͢Δɻ
γϣʔτϞʔυ
γϣʔτϞʔυͱʁ 34 γϣʔτϞʔυΛ༻͍ΔͱɺʹΑͬͯྨ͢Δ͜ͱ͕Ͱ͖Δɻ
γϣʔτϞʔυʹΑΔςετͷྨ 35 testing.Short Λ༻͍Δͱ γϣʔτϞʔυ͕༗ޮ࣌ʹ SkipͰ͖Δ
γϣʔτϞʔυͷ࣮ߦ 36 -short Λ͢ͱγϣʔτϞʔυʹͳΔ
-race
-raceͱʁ 38 ඪ४ͷrace detector(ڝ߹ݕग़ث)Λ༗ޮʹ͢Δϑϥά σʔλڝ߹Λݕग़Ͱ͖Δ
-raceͱʁ 39
-raceͷҙ 40 ڝ߹ݕग़ث͕༗ޮ࣌ʹɺίϯύΠϥσʔλڝ߹Λݕग़͢ΔͨΊʹ ίʔυʹରͯ͠instrumentationΛ࣮ߦ͢Δ
-raceͷҙ 41 instrumentation : ίϯύΠϥ͕Ճͷ໋ྩΛੜ͢Δ͜ͱ
-raceͷҙ 42 ࣮ߦ࣌ͷΦʔόϔου͕͋Δ • ϝϞϦ༻ྔ : 5ʙ10ഒ૿͑ΔՄೳੑ͕͋Δ • ࣮ߦ࣌ؒ :
2ʙ20ഒ͘ͳΔՄೳੑ͕͋Δ
-raceͷҙ 43 CIϩʔΧϧͰͷςετͰͷΈ༗ޮʹ͢Δ ຊ൪ڥͰΘͳ͍(͘͠ΧφϦΞϦϦʔεͰͷΈ͏)
ڝ߹ݕग़͔Βআ֎͢Δ 44
ςετ࣮ߦϞʔυ
ςετ࣮ߦϞʔυ 46 • -parallel : ฒྻ࣮ߦϞʔυ • -shuf f le
: ࣮ߦॱংΛϥϯμϜʹ͢Δ
-parallel 47 σϑΥϧτͰಉ࣮࣌ߦͰ͖Δςετͷ࠷େGOMAXPROCSͱಉ͡
-shuf f le 48 Go 1.17͔ΒઃఆͰ͖Δɻ ϥϯμϜʹ͢Δ͜ͱͰɺݸʑͷςετΛಠཱͰ͖Δ
-shuf f le 49 on/offΛࢦఆͰ͖ΔɻσϑΥϧτoff
-shuf f le 50 -vΛ͚ͭΔ͜ͱͰɺϞʔυͱͳΓɺγϟοϑϧ͞ΕͨςετΛ࣮ߦ͢Δࡍʹ ͦͷγʔυΛΔ͜ͱ͕Ͱ͖Δɻˠ ಉ͡ॱংͰ࠶࣮ߦͰ͖Δ
-shuf f le 51
ςʔϒϧۦಈςετ
ςʔϒϧۦಈςετ 53 ܾ·Γ͖ͬͨςετϩδοΫΛڞ௨Խ͢Δ
None
ςʔϒϧۦಈςετ 55 ςετέʔε
interfaceΛ༻͍ͯDIʹΑͬͯૄ݁߹͠ͳ͍ͱɺ ςετͰ͖ͳ͍߹͋Δ
setup&teardown
setup & teardown 58 • ࣄલ४උ : setup • ࣄޙॲཧ
: teardown
59 ࣄલ४උؔΛલॲཧͱͯ͠ ࣄޙॲཧؔΛdeferͱͯ͠ݺͼग़͢ɻ setup & teardown
60 t.CleanupΛ͏ͱ͡͝ॲཧؔΛొͰ͖Δɻ setup & teardown
Fuzzing
Fuzzing 62
Fuzzing 63
Fuzzing 64 Fuzzςετɺ*_test.goϑΝΠϧͰͳ͍ͱ࣮ߦͰ͖ͳ͍ ϑΝζςετʹ͖ͭɺϑΝζλʔήοτਖ਼֬ʹ1ͭͰͳ͚ΕͳΒͳ͍
Fuzzing 65 -fuzz=ͷ͋ͱʹɺਖ਼نදݱͰςετ͢ΔؔΛࢦఆ͢Δ
Fuzzing 66 Fuzzingςετςετ͕ࣦഊ͢Δ·Ͱ࣮ߦ͠ଓ͚ΔͷͰɺλΠϜΞτͷ࣌ؒΛઃఆ͢Δ