← Go コース
69. testing — go test でテストを書く
Go は標準でテストの仕組みを備えています。ファイル名を _test.go で終わらせ、func TestXxx(t *testing.T) という形の関数を書くと、go test コマンドが自動で見つけて実行します。期待と違えば t.Errorf でエラーを記録し、致命的なら t.Fatalf でその場で打ち切ります。
実務では、入力と期待値の組をスライスにまとめて回す「テーブル駆動テスト」が定番です。t.Run でサブテストに名前を付けると、どのケースが失敗したか分かりやすくなります。テストは別パッケージや外部ツールなしに書けるのが Go の強みです。
下のコードはテスト関数なので main がなく、このサイト上では実行できません(表示のみ)。手元では同じディレクトリに置いて go test を実行します。
サンプルコード(フレームワーク環境が必要なため表示のみ)
package calc
import "testing"
func Add(a, b int) int { return a + b }
func TestAdd(t *testing.T) {
cases := []struct {
name string
a, b int
expected int
}{
{"正の数", 2, 3, 5},
{"ゼロを含む", 0, 7, 7},
{"負の数", -4, 1, -3},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
got := Add(c.a, c.b)
if got != c.expected {
t.Errorf("Add(%d, %d) = %d; want %d", c.a, c.b, got, c.expected)
}
})
}
}