April 2022
Beginner to intermediate
464 pages
6h 44m
Japanese
Goの標準のテストの記法では値の比較などを自前で行い、検証結果が期待と一致していないときにt.Error()などを呼ぶという設計になっています。エラーメッセージなどは人が理解できるよう丁寧に書くのが良いと言われています。しかし、わかりやすいエラーメッセージを書くのは簡単なことではありません。
特に構造体を比較するのは大変です。ここでは以下のような構造体の値を == の等価演算子を用いて比較するテストを考えてみます。
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 型を含んでいる値を ==
Read now
Unlock full access