Go のテストを書く時、期待値として構造体を比較したいときが多く発生すると思います。
特に時刻情報などテストで扱う場合、テストを書くレベルが高くなるかと思います。
そんな時におすすめなのが go-cmp になります。
go-cmp を使わないで書く場合
例えば以下のような構造体がある場合、
go-cmp を使わないでテストを書く場合、このようになる。
メリット
go-cmp を使うメリットとしては以下の場合があるかと思います。
-
値に Diff があった場合に見やすい
-
比較対象を柔軟に制御しやすい
ちなみに Go のテストでは、reflect.DeepEqual
がありますが、
こちらの go-cmp は上位互換に位置しているものです。
構造体から一部を除外したい場合
この場合、CreateAt
UpdateAt
を除外すると以下のように記述できます。
cmpopts.IgnoreFields
に除外したい値を入れることで除外できます。
緩く時間チェックする場合
先ほどは時刻の値をチェックしていましたが、もう少し緩くチェックしたい場合もあると思います。
そんな時は、cmpopts.EquateApproxTime
を使用します。