GitHub - google/go-cmp: Package for comparing Go values in tests favicon GitHub
GitHub - google/go-cmp: Package for comparing Go values in tests
Package for comparing Go values in tests. Contribute to google/go-cmp development by creating an account on GitHub.
GitHub - google/go-cmp: Package for comparing Go values in tests

Go のテストで構造体を比較するとき、標準では reflect.DeepEqual を使って判定するが、これはdiffが見づらかったり、比較したくないフィールドがあるときに制御がしづらかったりといった不満がある。

そこで役立つのが go-cmp で、

  • diffを見やすくする
  • 比較したいフィールドを柔軟に制御できる といった点で reflect.DeepEqual よりも使いやすい。

Goのテスティングライブラリとして testify もあるが、こちらはライブラリ自体が大きかったり、Go標準の書き方からは乖離してしまうというところで利用したくない場合もある。

go-cmp は以下のようにシンプルに書くことができる。

if diff := cmp.Diff(got, tt.want, opts...); diff != "" {
    t.Errorf("Values are mismatch (-got +want):\n%s", diff)
}