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エンジニア募集中!