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
240
Golangのデータベーステストフィクスチャ作成
雪泉はかわいいぞ
お姫ちんはいいぞ
マグロ隊長kinTV
February 23, 2024
Tweet
Share
More Decks by マグロ隊長kinTV
See All by マグロ隊長kinTV
めぐろLT#21 今年一番の仕事の成果
maguroalternative
0
36
DiscordBotをPythonからGoへリプレイスした話
maguroalternative
0
72
DiscordとLINEをPython+FastAPI+Dockerで連携させる
maguroalternative
0
320
就活体験記
maguroalternative
0
110
LINEBotCourse.pdf
maguroalternative
0
210
カプコンのカンファレンスいった話
maguroalternative
0
160
22年度新歓LT
maguroalternative
0
96
jackさん合同LT
maguroalternative
0
61
21年度新歓LT
maguroalternative
0
41
Other Decks in Technology
See All in Technology
フルカイテン株式会社 採用資料
fullkaiten
0
40k
【若手エンジニア応援LT会】ソフトウェアを学んできた私がインフラエンジニアを目指した理由
kazushi_ohata
0
150
いざ、BSC討伐の旅
nikinusu
2
780
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
170
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
2
280
AWS Lambda のトラブルシュートをしていて思うこと
kazzpapa3
2
170
スクラムチームを立ち上げる〜チーム開発で得られたもの・得られなかったもの〜
ohnoeight
2
350
New Relicを活用したSREの最初のステップ / NRUG OKINAWA VOL.3
isaoshimizu
2
580
Terraform Stacks入門 #HashiTalks
msato
0
350
Amazon CloudWatch Network Monitor のススメ
yuki_ink
1
200
適材適所の技術選定 〜GraphQL・REST API・tRPC〜 / Optimal Technology Selection
kakehashi
1
160
AGIについてChatGPTに聞いてみた
blueb
0
130
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
31
6.3k
Rails Girls Zürich Keynote
gr2m
94
13k
Designing Experiences People Love
moore
138
23k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Building an army of robots
kneath
302
43k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Why Our Code Smells
bkeepers
PRO
334
57k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
A Tale of Four Properties
chriscoyier
156
23k
We Have a Design System, Now What?
morganepeng
50
7.2k
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/