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
Golangのデータベーステストフィクスチャ作成
Search
マグロ隊長kinTV
February 23, 2024
Technology
0
340
Golangのデータベーステストフィクスチャ作成
雪泉はかわいいぞ
お姫ちんはいいぞ
マグロ隊長kinTV
February 23, 2024
Tweet
Share
More Decks by マグロ隊長kinTV
See All by マグロ隊長kinTV
UDDのススメ - 拡張版 -
maguroalternative
1
390
遊戯王GX 丸藤兄弟から学ぶ成長
maguroalternative
1
79
UDDのすすめ
maguroalternative
0
1.1k
LINE Works Bot入門
maguroalternative
0
74
めぐろLT#21 今年一番の仕事の成果
maguroalternative
0
96
DiscordBotをPythonからGoへリプレイスした話
maguroalternative
1
130
DiscordとLINEをPython+FastAPI+Dockerで連携させる
maguroalternative
0
400
就活体験記
maguroalternative
0
150
LINEBotCourse.pdf
maguroalternative
0
240
Other Decks in Technology
See All in Technology
【CEDEC2025】ブランド力アップのためのコンテンツマーケティング~ゲーム会社における情報資産の活かし方~
cygames
PRO
0
250
Amazon Qで2Dゲームを作成してみた
siromi
0
130
Serverless Meetup #21
yoshidashingo
1
110
Strands Agents & Bedrock AgentCoreを1分でおさらい
minorun365
PRO
6
280
バクラクによるコーポレート業務の自動運転 #BetAIDay
layerx
PRO
1
910
【CEDEC2025】『Shadowverse: Worlds Beyond』二度目のDCG開発でゲームをリデザインする~遊びやすさと競技性の両立~
cygames
PRO
1
340
LTに影響を受けてテンプレリポジトリを作った話
hol1kgmg
0
340
反脆弱性(アンチフラジャイル)とデータ基盤構築
cuebic9bic
3
170
GMOペパボのデータ基盤とデータ活用の現在地 / Current State of GMO Pepabo's Data Infrastructure and Data Utilization
zaimy
3
210
ホリスティックテスティングの右側も大切にする 〜2つの[はか]る〜 / Holistic Testing: Right Side Matters
nihonbuson
PRO
0
650
ロールが細分化された組織でSREと協働するインフラエンジニアは何をするか? / SRE Lounge #18
kossykinto
0
210
【CEDEC2025】『ウマ娘 プリティーダービー』における映像制作のさらなる高品質化へ!~ 豊富な素材出力と制作フローの改善を実現するツールについて~
cygames
PRO
0
250
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Side Projects
sachag
455
43k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Designing for Performance
lara
610
69k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
Visualization
eitanlees
146
16k
How to Think Like a Performance Engineer
csswizardry
25
1.8k
Become a Pro
speakerdeck
PRO
29
5.5k
Building Applications with DynamoDB
mza
95
6.5k
Practical Orchestrator
shlominoach
190
11k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
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/