DRY & 型安全にテスト用structを初期化しよう

DRY & 型安全にテスト用structを初期化しよう

Go Conference 2020 Autumnの登壇資料です。
YoutubeのURLはhttps://www.youtube.com/watch?v=DkWUh4oR0ac になります。

841002bf24bb562253de7eb3c17ceae6?s=128

Kanji Yomoda

October 10, 2020
Tweet

Transcript

  1. DRY & 型安全にテスト用structを初期化し よう Kanji Yomoda Go Conference 2020 Autumn

  2. 自己紹介 四方田 貫児 / Kanji Yomoda エムスリー 株式会社 @k__yomo

  3. テストを書くのは大変・辛い - テストしやすいコード - 依存の解決 - テスト用のデータの準備 - and so

    on...
  4. - テスト用データ生成のライブラリのpros/cons - 既存ライブラリの課題 - 課題解決のために開発したライブラリの紹介 - まとめ 概要

  5. テスト用データ生成ライブラリ testfixtures factory-go

  6. testfixtures Go YAML YAMLからDBのレコードを作るライブラリ

  7. Pros - シンプル - YAMLの可読性が高い Cons - テスト時の入力(引数)用のデータやmockの返り値としては使えない - 値が柔軟な設定・使い回しが出来ない

    - RDBにしか使えない testfixtures
  8. 柔軟なstruct初期化ライブラリ factory-go

  9. Pros - 導入が簡単 - 値の設定が柔軟(再帰的な初期化なども可能) Cons - Factoryの可読性が低い - 型の恩恵が得ずらい

    - 配列の値の一括上書きが出来ない factory-go
  10. DRYで楽にかつ型安全で保守性が高い テスト用のデータ(struct)の初期化がしたい! - 冗長な書き方になってしまう - YAMLやinterfaceなど型の恩恵が受けられない 既存ライブラリの課題

  11. - DRYで冗長な記述を書かない - 型安全で、補完が効く - 直感的なインターフェース fixtory

  12. 設計思想 - DRY テストケース固有の値以外は使い回す

  13. 設計思想 - 型安全 型があることで... - テスト用のデータにすぐ飛べる -> 可読性が高い - コンパイルエラーで検知できる

    -> 変更に強い - コード補完が効く -> 効率◦
  14. fixtory fixtory factory-go

  15. 0. 対象struct

  16. 1. go generate

  17. 2. struct初期化

  18. フィールド定義の使い回し

  19. DBへのINSERT

  20. Blueprintのstructに対して、ひたすら上書き 内部実装

  21. Pros - 値の設定・上書きが柔軟 - 型の恩恵が得られる Cons - go generate or

    fixtoryコマンドの実行が必要 (genericsが入れば不要になる予定) - ゼロ値での上書きが面倒 - 上書きし過ぎると、可読性が下がる fixtroy
  22. ゼロ値での上書き

  23. まとめ ライブラリ 可読性 柔軟性 効率性 testfixtures ◎ △ △ factory-go

    △ ◎ △ fixtory ◯ ◯ ◎ ユースケースに応じたライブラリ選択
  24. まとめ 辛くて大変なテストを 出来るだけ楽で楽しいものしていきましょう!

  25. We’re hiring! Goエンジニア募集中!