13.7 testifyを使う

Goの標準のテストの記法では値の比較などを自前で行い、検証結果が期待と一致していないときにt.Error()などを呼ぶという設計になっています。エラーメッセージなどは人が理解できるよう丁寧に書くのが良いと言われています。しかし、わかりやすいエラーメッセージを書くのは簡単なことではありません。

特に構造体を比較するのは大変です。ここでは以下のような構造体の値を == の等価演算子を用いて比較するテストを考えてみます。

リスト13-3: 等価演算子を用いて構造体の値を比較するテスト
type User struct {
	UserID   string
	UserName string
}

func TestTom(t *testing.T) {
	tom := User{UserID: "0001", UserName: "Tom"}
	tom2 := User{UserID: "0001", UserName: "Tom"}

	if tom != tom2 {
		t.Errorf("User tom is mismatch, tom=%v, tom2=%v", tom, tom2)
	}
}

上記のテストはパスします。== の等価演算子を用いた比較についてはComparison operators 1 に記載があります。構造体の値は、構造体のすべてのフィールドが比較可能、つまり map 型や slice 型、 func 型の値を含んでいない場合に比較できます。構造体のブランクフィールドでないフィールドが等しい場合に等価とみなされます。

slice 型を == で比較するとどうなるでしょうか? 構造体の中に slice 型を含んでいる値を ==