Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Golangのデータベーステ ストフィクスチャ作成 マグロ
Slide 2
Slide 2 text
自己紹介 • 名前:マグロ/佐々木陽貴 • 所属:日本大学工学部情報工学科B4/24卒 • 分野:Webサーバーサイド/Python/Golang • X(旧Twitter):@sigumataityouda
Slide 3
Slide 3 text
突然ですが、、、、、、
Slide 4
Slide 4 text
テストコード、書いてますか??
Slide 5
Slide 5 text
え?テストコードって何??
Slide 6
Slide 6 text
テストコードとは • プログラムが想定通り動くか確認するためのプログラムのこと 実装前に動作確認を行えるので、開発効率の向上やコードへの 理解が進まる つまり書けばお得
Slide 7
Slide 7 text
でも書くのが面倒!!
Slide 8
Slide 8 text
特にデータベース!!
Slide 9
Slide 9 text
データベースのテスト • (自分の推しを詰め込める)テーブルがあるとします。
Slide 10
Slide 10 text
データベースのテスト • 以下のようなデータをCRUDできるWebアプリを想定しテス トを組みます。
Slide 11
Slide 11 text
ここが面倒!! データベースに結果が反映されたまま
Slide 12
Slide 12 text
結果が反映されたまま • 登録のテスト 1回目は通っても2回 目はCOUNTで引っか かる 登録した値と個数が 一致しているかテス ト テスト前にDELETE するのもアリだが、 必要なデータも消し てしまうかも
Slide 13
Slide 13 text
ここが面倒!! 肥大化するSQL
Slide 14
Slide 14 text
肥大化するSQL • 読み取りを行う場合、事前にテーブルにデータを格納する必要 があるが、、、 登録のためSQLをテ ストコード内に書か なければならない 加えてsource_idは外 部キーのためsource を登録するSQLも書 かなければならない source_idは連番なのでSELECT で取り出す必要があり、 依存関係が増えるとさらに大変 に、、、
Slide 15
Slide 15 text
どうにかならないかな、、、?
Slide 16
Slide 16 text
内定者インターンスタート そこであるものを知る
Slide 17
Slide 17 text
フィクスチャ作成 • フィクスチャとは テストの実行前後で行いたい前処理や後処理を記述するための 関数 データベースのテストで結構多用されるらしい Golangで実装してみよう
Slide 18
Slide 18 text
ロールバック • ロールバックを使用することで、テストで行われた操作をな かったことにできる テストコード データベース 登録 取得 カグラとアイマスのキャラね ロールバック 誰それ??? 取得 登録したデータはな くなるため、何度テ ストしても同じ結果 が返ってくるように なる
Slide 19
Slide 19 text
ロールバック Golangには標準ライブラリでデータベースを操作でき、トラン ザクション処理を行うことができる しかし本番での競合状態を避けるため、テストのみトランザク ション使用 DBとTxに型の互換がないため、新たにDriver構造体を宣言し、 独自の型を作成
Slide 20
Slide 20 text
フィクスチャ • データベースのテーブルの型とテストに使用するテーブルを宣 言
Slide 21
Slide 21 text
フィクスチャ • ModelConnector宣言 データベースのモデルと操作、他のモデルとの関連を記述する テーブルに入れ るデフォルトの 値
Slide 22
Slide 22 text
フィクスチャ • ModelConnector宣言 データベースのモデルと操作、他のモデルとの関連を記述する Insertする分だけ テーブルに入れる []funcの形で代 入し、上書きも 可能
Slide 23
Slide 23 text
フィクスチャ • ModelConnector宣言 データベースのモデルと操作、他のモデルとの関連を記述する テーブルに入れ た値を挿入 テストコード内 で参照が可能
Slide 24
Slide 24 text
フィクスチャ • ModelConnector宣言 データベースのモデルと操作、他のモデルとの関連を記述する 外部キーがある場合 同じ値を代入 Source_idを自動的に 登録してくれる
Slide 25
Slide 25 text
フィクスチャ • ModelConnector宣言 データベースのモデルと操作、他のモデルとの関連を記述する 登録 連番のidを返してくれ る
Slide 26
Slide 26 text
フィクスチャ • あとは順番通りに実行させるように組み込み、、、
Slide 27
Slide 27 text
フィクスチャ • データベースのテストデータを 簡単に用意できるように!!!
Slide 28
Slide 28 text
まとめ • データベースのテストにはロールバックを使おう • フィクスチャを作れば楽にテストデータを用意できる • それと雪泉と四条貴音はいいぞ!!!!!!
Slide 29
Slide 29 text
(一応)今回のコードと参考リンク • コード https://github.com/maguro-alternative/goheki • 参考(ほぼ丸パクリ)リンク https://engineering.mercari.com/blog/entry/20220411- 42fc0ba69c/