Slide 1

Slide 1 text

2022/11/09 Let’s Go Talk #4 TOC Go で Golden File Test

Slide 2

Slide 2 text

- TOC(とっしー) - コネヒト株式会社 - バックエンドエンジニア - 主にPHP - Go は趣味で勉強中 自己紹介

Slide 3

Slide 3 text

- tenntenn さんの主催する Gopher 塾に参加してきました - Testing がテーマでテスト全般の講義 - Golden File Test も扱った - PHP でも最近使っていたので興味が沸いた LT のモチベーション

Slide 4

Slide 4 text

- API のレスポンスデータをファイルで保持し、比較するテスト - Snapshot Testing とも呼ばれる Golden File Test とは 初回実行 (or -update) 目視で出力 ファイルを確認 ファイル生成 2回目以降の テスト実行 出力 比較 ファイルの データと出力 を比較

Slide 5

Slide 5 text

ライブラリ色々 - tenntenn/golden - シンプルで扱いやすい印象 - 最近アップデートされて更新とチェックが同時にできる - sebdah/goldie - オプションが豊富 - 2020年からメンテされていない - gotestyourself/gotest.tools - string, []byte形式に対応

Slide 6

Slide 6 text

実際のコード例 - tenntenn/golden の例 - 比較やファイル生成してるのは golden.Check の部分だけ - 指定した testdata ディレクトリ配下に {name}.golden ファイルを生成する

Slide 7

Slide 7 text

- 形式としては json で保存されるが、ファイルとしてはテキストファイルで 認識される - json ファイルとして認識するために工夫してるブログも - https://khigashigashi.hatenablog.com/entry/2019/04/27/15 0230  - goldie はオプションで解決できたりする - goldie.WithNameSuffix(".golden.json"), golden ファイルはテキストファイル

Slide 8

Slide 8 text

- json にしたとして、めっちゃ長いレスポンスを全部目視できる? - 人間誰しも見落としするよね - 外形は一緒でも中身のロジックの変化はテストできない - レスポンス構造を担保したい、とかは使えそう - 中身のロジックはユニットテストで守りたい - 何をテストしたいのか、で使い所が分かれそう Golden File Test は使い所が大事

Slide 9

Slide 9 text

- tenntenn/golden は json 形式以外(string, []byte, io.Reader, encoding.TextMarshaler)も対応 - txtar 形式(複数のテキストファイルをまとめたもの)とかに対して結構 使いやすくなっている - コマンドラインツールのテストでも使えそうなので使ってみたい その他所感