Go のテストを testify/assert で書く
備忘録。
最近 Go のテストで使い始めたアサートライブラリについて。
Go のテストは標準の testing
だけでも書けなくはないが、メッセージなど何から何まで書かないといけないのが辛い。
Behavior Driven で書くなら Gingko と Gomega の組み合わせがいいが、Table Driven で書くなら単純なアサートライブラリがほしい。ということで使い始めたのが testify/assert
テストの制御フローや実行は testing
に任せつつ、各種アサートを簡単に書くことができる。
func add(x, y int) int { return x + y } func TestAdd(t *testing.T) { cases := []struct { x int y int expected int } { { 1, 2, 3 }, { 3, 4, 7 }, } // testing だけで書く場合 for _, tt := range cases { t.Run(fmt.Sprintf("case(%d, %d)", tt.x, tt.y), func(t *testing.T) { actual := add(tt.x, tt.y) if actual != tt.expected { t.Errorf("expected: %d, actual: %d", tt.expected, tt.actual) } }) } // testify/assert を使うとこうなる for _, tt := range cases { t.Run(fmt.Sprintf("case(%d, %d)", tt.x, tt.y), func(t *testing.T) { actual := add(tt.x, tt.y) assert.Equal(t, tt.expected, actual) }) } }
ひたすら if
を書いたりメッセージを書かなくていいのはもちろんのこと、assert.Equal
など Deep Equality で比較してくれるのでだいぶ楽になる。