April 2022
Beginner to intermediate
464 pages
6h 44m
Japanese
Goのテストにおいて、複雑な構造体の値を比較したいことがよくあります。ロジックの結果はなんらかの値として作用することが多いので、型の値を比較したいと思うのは自然なことです。値が等価かどうかの判定には、go-cmp 1というライブラリが便利です。
https://github.com/google/go-cmp 2021/12時点の最新である v0.5.6 で確認しています。
構造体をstretchr/testifyを使って比較すると、reflect.DeepEqual()よりも手軽にわかりやすいエラーが表示できることは紹介しました。より高度な検証を行いたい場合、あるいはGoの標準のテストの書き方に合わせたいのであれば、go-cmpをおすすめします。
Goはテストのフレームワークを提供していません。テストは testing パッケージを使って実装します。どのようなフレームワークを使うかはプロジェクトメンバーの構成や状況によって変わるので、一概に何が良いと決めることはできません。Goはテストの書き方の標準的な書式を用意しており、Goにあまりなじみのない新規参画者やテストのフレームワークになじみのない開発者も、ベテランであっても同じようにテストコードを読めることを目指しています。go-cmp は reflect.DeeqEqual() の代わりに使用できます。
go-cmp を使ったスライスを含む構造体の比較 // go-cmp の Diff を使って値を比較
if diff := cmp.Diff(tomRead now
Unlock full access