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
DRY & 型安全にテスト用structを初期化し よう Kanji Yomoda Go Conference 2020 Autumn
Slide 2
Slide 2 text
自己紹介 四方田 貫児 / Kanji Yomoda エムスリー 株式会社 @k__yomo
Slide 3
Slide 3 text
テストを書くのは大変・辛い - テストしやすいコード - 依存の解決 - テスト用のデータの準備 - and so on...
Slide 4
Slide 4 text
- テスト用データ生成のライブラリのpros/cons - 既存ライブラリの課題 - 課題解決のために開発したライブラリの紹介 - まとめ 概要
Slide 5
Slide 5 text
テスト用データ生成ライブラリ testfixtures factory-go
Slide 6
Slide 6 text
testfixtures Go YAML YAMLからDBのレコードを作るライブラリ
Slide 7
Slide 7 text
Pros - シンプル - YAMLの可読性が高い Cons - テスト時の入力(引数)用のデータやmockの返り値としては使えない - 値が柔軟な設定・使い回しが出来ない - RDBにしか使えない testfixtures
Slide 8
Slide 8 text
柔軟なstruct初期化ライブラリ factory-go
Slide 9
Slide 9 text
Pros - 導入が簡単 - 値の設定が柔軟(再帰的な初期化なども可能) Cons - Factoryの可読性が低い - 型の恩恵が得ずらい - 配列の値の一括上書きが出来ない factory-go
Slide 10
Slide 10 text
DRYで楽にかつ型安全で保守性が高い テスト用のデータ(struct)の初期化がしたい! - 冗長な書き方になってしまう - YAMLやinterfaceなど型の恩恵が受けられない 既存ライブラリの課題
Slide 11
Slide 11 text
- DRYで冗長な記述を書かない - 型安全で、補完が効く - 直感的なインターフェース fixtory
Slide 12
Slide 12 text
設計思想 - DRY テストケース固有の値以外は使い回す
Slide 13
Slide 13 text
設計思想 - 型安全 型があることで... - テスト用のデータにすぐ飛べる -> 可読性が高い - コンパイルエラーで検知できる -> 変更に強い - コード補完が効く -> 効率○
Slide 14
Slide 14 text
fixtory fixtory factory-go
Slide 15
Slide 15 text
0. 対象struct
Slide 16
Slide 16 text
1. go generate
Slide 17
Slide 17 text
2. struct初期化
Slide 18
Slide 18 text
フィールド定義の使い回し
Slide 19
Slide 19 text
DBへのINSERT
Slide 20
Slide 20 text
Blueprintのstructに対して、ひたすら上書き 内部実装
Slide 21
Slide 21 text
Pros - 値の設定・上書きが柔軟 - 型の恩恵が得られる Cons - go generate or fixtoryコマンドの実行が必要 (genericsが入れば不要になる予定) - ゼロ値での上書きが面倒 - 上書きし過ぎると、可読性が下がる fixtroy
Slide 22
Slide 22 text
ゼロ値での上書き
Slide 23
Slide 23 text
まとめ ライブラリ 可読性 柔軟性 効率性 testfixtures ◎ △ △ factory-go △ ◎ △ fixtory ◯ ◯ ◎ ユースケースに応じたライブラリ選択
Slide 24
Slide 24 text
まとめ 辛くて大変なテストを 出来るだけ楽で楽しいものしていきましょう!
Slide 25
Slide 25 text
We’re hiring! Goエンジニア募集中!