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
Golangのデータベーステストフィクスチャ作成
Search
マグロ隊長kinTV
February 23, 2024
Technology
460
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Golangのデータベーステストフィクスチャ作成
雪泉はかわいいぞ
お姫ちんはいいぞ
マグロ隊長kinTV
February 23, 2024
More Decks by マグロ隊長kinTV
See All by マグロ隊長kinTV
C#未経験の僕がAIに読めるコードを書かせるまで
maguroalternative
0
380
感動を貰う側から与える側へ -アイドルマスターミリオンライブから学ぶCfPに挑むと言うこと-
maguroalternative
1
580
useEffectってなんで非推奨みたいなこと言われてるの?
maguroalternative
11
8k
React19.2のuseEffectEventを追う
maguroalternative
2
1.2k
UDDのススメ - 拡張版 -
maguroalternative
2
1.9k
遊戯王GX 丸藤兄弟から学ぶ成長
maguroalternative
1
220
UDDのすすめ
maguroalternative
0
1.5k
LINE Works Bot入門
maguroalternative
0
150
めぐろLT#21 今年一番の仕事の成果
maguroalternative
0
160
Other Decks in Technology
See All in Technology
分析AIエージェントを育てる、動く環境を育てる
codatum
1
1k
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
120
「事実」を「計測」して、「解釈」する 〜AWS Lambdaのメモリ最適解の見つけ方〜
maimyyym
0
140
味覇で作るパスタが美味い - 20261001_yabaubuki.dev
livesense
PRO
0
130
Datadog の学び方 - あるいは、オブザーバビリティを学ぶとは何か
mananyuki
1
560
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
330
Jetson Orin Nanoとk3sとローカルLLMで音声文字起こしシステム作ってみた
y_sera15
0
120
hackers_champloo_2026_tidb
makocchi
0
140
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
170
M5Stackで作る BLEマウス GPSログの世界
tomokusaba
0
190
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
8
2.2k
メルペイ 会計システム概要と歴史
mewuto
1
220
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Google's AI Overviews - The New Search
badams
0
1.6k
How to Talk to Developers About Accessibility
jct
2
570
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Typedesign – Prime Four
hannesfritz
42
3.2k
Color Theory Basics | Prateek | Gurzu
gurzu
1
490
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
550
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
Practical Orchestrator
shlominoach
192
12k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
310
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Transcript
Golangのデータベーステ ストフィクスチャ作成 マグロ
自己紹介 • 名前:マグロ/佐々木陽貴 • 所属:日本大学工学部情報工学科B4/24卒 • 分野:Webサーバーサイド/Python/Golang • X(旧Twitter):@sigumataityouda
突然ですが、、、、、、
テストコード、書いてますか??
え?テストコードって何??
テストコードとは • プログラムが想定通り動くか確認するためのプログラムのこと 実装前に動作確認を行えるので、開発効率の向上やコードへの 理解が進まる つまり書けばお得
でも書くのが面倒!!
特にデータベース!!
データベースのテスト • (自分の推しを詰め込める)テーブルがあるとします。
データベースのテスト • 以下のようなデータをCRUDできるWebアプリを想定しテス トを組みます。
ここが面倒!! データベースに結果が反映されたまま
結果が反映されたまま • 登録のテスト 1回目は通っても2回 目はCOUNTで引っか かる 登録した値と個数が 一致しているかテス ト テスト前にDELETE
するのもアリだが、 必要なデータも消し てしまうかも
ここが面倒!! 肥大化するSQL
肥大化するSQL • 読み取りを行う場合、事前にテーブルにデータを格納する必要 があるが、、、 登録のためSQLをテ ストコード内に書か なければならない 加えてsource_idは外 部キーのためsource を登録するSQLも書
かなければならない source_idは連番なのでSELECT で取り出す必要があり、 依存関係が増えるとさらに大変 に、、、
どうにかならないかな、、、?
内定者インターンスタート そこであるものを知る
フィクスチャ作成 • フィクスチャとは テストの実行前後で行いたい前処理や後処理を記述するための 関数 データベースのテストで結構多用されるらしい Golangで実装してみよう
ロールバック • ロールバックを使用することで、テストで行われた操作をな かったことにできる テストコード データベース 登録 取得 カグラとアイマスのキャラね ロールバック
誰それ??? 取得 登録したデータはな くなるため、何度テ ストしても同じ結果 が返ってくるように なる
ロールバック Golangには標準ライブラリでデータベースを操作でき、トラン ザクション処理を行うことができる しかし本番での競合状態を避けるため、テストのみトランザク ション使用 DBとTxに型の互換がないため、新たにDriver構造体を宣言し、 独自の型を作成
フィクスチャ • データベースのテーブルの型とテストに使用するテーブルを宣 言
フィクスチャ • ModelConnector宣言 データベースのモデルと操作、他のモデルとの関連を記述する テーブルに入れ るデフォルトの 値
フィクスチャ • ModelConnector宣言 データベースのモデルと操作、他のモデルとの関連を記述する Insertする分だけ テーブルに入れる []funcの形で代 入し、上書きも 可能
フィクスチャ • ModelConnector宣言 データベースのモデルと操作、他のモデルとの関連を記述する テーブルに入れ た値を挿入 テストコード内 で参照が可能
フィクスチャ • ModelConnector宣言 データベースのモデルと操作、他のモデルとの関連を記述する 外部キーがある場合 同じ値を代入 Source_idを自動的に 登録してくれる
フィクスチャ • ModelConnector宣言 データベースのモデルと操作、他のモデルとの関連を記述する 登録 連番のidを返してくれ る
フィクスチャ • あとは順番通りに実行させるように組み込み、、、
フィクスチャ • データベースのテストデータを 簡単に用意できるように!!!
まとめ • データベースのテストにはロールバックを使おう • フィクスチャを作れば楽にテストデータを用意できる • それと雪泉と四条貴音はいいぞ!!!!!!
(一応)今回のコードと参考リンク • コード https://github.com/maguro-alternative/goheki • 参考(ほぼ丸パクリ)リンク https://engineering.mercari.com/blog/entry/20220411- 42fc0ba69c/