Open3

Go Test

xion6xion6

testing パッケージのメソッド

t.Skip

テストの実行をスキップする


func TestRun(t *testing.T) {
	t.Skip("リファクタリング中")

	// 以下の処理がスキップされる
	// ...
}

t.Fatal, t.Fatalf

t.Error, t.Errorf

t.Log, t.Logf

t.Setenv

wantPort := 3333
t.Setenv("PORT", fmt.Sprint(wantPort))

t.Cleanup

t.Cleanup(func() { _ = resp.Body.Close() })

テスト時、defer だと並列で動くサブテストの終了を待たずに実行されてしまうため t.Cleanup を使用する

xion6xion6

テストのポイント

① ファイル名の末尾は _test.go で終わるようにする

❯ tree
.
├── Makefile
├── config
│   ├── config.go
│   └── config_test.go
├── go.mod
├── go.sum
├── main.go
└── main_test.go

② パッケージ名はそのフォルダに入っているファイルと同じもの

config.go
package config
config_test.go
package config

③ 関数名は Test から始まる名前にする、引数は *testing.T

func TestNew(t *testing.T) {
	// ...
}

t.Error()t.Errorf を使用し、テストが失敗であることを知らせる

t.Errorf("cannot create config: %v", err)
xion6xion6

実行コマンド

現在のパッケージをテスト

go test

現在のパッケージ以下のすべてのテストを実行

go test ./...

特定のパッケージに関しテストを実行

go test ./config

テスト関数を指定して実行

go test -run TestFoo ./...

キャッシュなしで実行

go test -count=1 ./...

go clean -testcache とキャッシュを消してもいい