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
DRY & 型安全にテスト用structを初期化しよう
Search
Kanji Yomoda
October 10, 2020
Programming
1
670
DRY & 型安全にテスト用structを初期化しよう
Go Conference 2020 Autumnの登壇資料です。
YoutubeのURLは
https://www.youtube.com/watch?v=DkWUh4oR0ac
になります。
Kanji Yomoda
October 10, 2020
Tweet
Share
More Decks by Kanji Yomoda
See All by Kanji Yomoda
Elasticstack Terraform Providerの最近のアップデート
kyomo
0
100
Goで作る全文検索エンジンライブラリ
kyomo
0
1.2k
Terraform Provider開発のノウハウ
kyomo
1
260
Paper reading - ROSE: Robust Caches for Amazon Product Search
kyomo
0
58
Elasticsearch Aggregations
kyomo
0
81
AlloyDB overview
kyomo
0
110
Unsupervised synonym Extraction
kyomo
0
310
pubsub_cli - CLI Tool for Cloud Pub/Sub
kyomo
0
120
DatastoreからSpannerへのゼロダウンタイム移行
kyomo
0
120
Other Decks in Programming
See All in Programming
Software Architecture
hschwentner
6
2.4k
SwiftDataを使って10万件のデータを読み書きする
akidon0000
0
250
One Enishi After Another
snoozer05
PRO
0
170
AIのバカさ加減に怒る前にやっておくこと
blueeventhorizon
0
140
Blazing Fast UI Development with Compose Hot Reload (droidcon London 2025)
zsmb
0
440
ドメイン駆動設計のエッセンス
masuda220
PRO
15
7.3k
HTTPじゃ遅すぎる! SwitchBotを自作ハブで動かして学ぶBLE通信
occhi
0
140
オンデバイスAIとXcode
ryodeveloper
0
370
Making Angular Apps Smarter with Generative AI: Local and Offline-capable
christianliebel
PRO
0
100
ビルドプロセスをデバッグしよう!
yt8492
0
210
contribution to astral-sh/uv
shunsock
0
580
スキーマ駆動で、Zod OpenAPI Honoによる、API開発するために、Hono Takibiというライブラリを作っている
nakita628
0
330
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
7.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
Building an army of robots
kneath
306
46k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
4 Signs Your Business is Dying
shpigford
186
22k
Mobile First: as difficult as doing things right
swwweet
225
10k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
YesSQL, Process and Tooling at Scale
rocio
174
15k
The Invisible Side of Design
smashingmag
302
51k
It's Worth the Effort
3n
187
28k
Transcript
DRY & 型安全にテスト用structを初期化し よう Kanji Yomoda Go Conference 2020 Autumn
自己紹介 四方田 貫児 / Kanji Yomoda エムスリー 株式会社 @k__yomo
テストを書くのは大変・辛い - テストしやすいコード - 依存の解決 - テスト用のデータの準備 - and so
on...
- テスト用データ生成のライブラリのpros/cons - 既存ライブラリの課題 - 課題解決のために開発したライブラリの紹介 - まとめ 概要
テスト用データ生成ライブラリ testfixtures factory-go
testfixtures Go YAML YAMLからDBのレコードを作るライブラリ
Pros - シンプル - YAMLの可読性が高い Cons - テスト時の入力(引数)用のデータやmockの返り値としては使えない - 値が柔軟な設定・使い回しが出来ない
- RDBにしか使えない testfixtures
柔軟なstruct初期化ライブラリ factory-go
Pros - 導入が簡単 - 値の設定が柔軟(再帰的な初期化なども可能) Cons - Factoryの可読性が低い - 型の恩恵が得ずらい
- 配列の値の一括上書きが出来ない factory-go
DRYで楽にかつ型安全で保守性が高い テスト用のデータ(struct)の初期化がしたい! - 冗長な書き方になってしまう - YAMLやinterfaceなど型の恩恵が受けられない 既存ライブラリの課題
- DRYで冗長な記述を書かない - 型安全で、補完が効く - 直感的なインターフェース fixtory
設計思想 - DRY テストケース固有の値以外は使い回す
設計思想 - 型安全 型があることで... - テスト用のデータにすぐ飛べる -> 可読性が高い - コンパイルエラーで検知できる
-> 変更に強い - コード補完が効く -> 効率◦
fixtory fixtory factory-go
0. 対象struct
1. go generate
2. struct初期化
フィールド定義の使い回し
DBへのINSERT
Blueprintのstructに対して、ひたすら上書き 内部実装
Pros - 値の設定・上書きが柔軟 - 型の恩恵が得られる Cons - go generate or
fixtoryコマンドの実行が必要 (genericsが入れば不要になる予定) - ゼロ値での上書きが面倒 - 上書きし過ぎると、可読性が下がる fixtroy
ゼロ値での上書き
まとめ ライブラリ 可読性 柔軟性 効率性 testfixtures ◎ △ △ factory-go
△ ◎ △ fixtory ◯ ◯ ◎ ユースケースに応じたライブラリ選択
まとめ 辛くて大変なテストを 出来るだけ楽で楽しいものしていきましょう!
We’re hiring! Goエンジニア募集中!