Dev Study
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)
			}
		})
	}
}
公式ドキュメントで詳しく ↗