April 2022
Beginner to intermediate
464 pages
6h 44m
Japanese
テストを実行する際に、事前事後の共通処理を実行したいケースがあります。事前事後にもパターンがあり以下のように整理できます。
テスト共通の実行前後
TestMain() 関数を利用します。 go test を実行した際、テストファイル内に TestMain() があればこれを経由して各テスト関数が順次 m.Run() で呼び出されます。ここに事前事後の処理を追加します (サンプルコードの1、6)
テスト関数の実行前後
テスト関数内に記載します。(サンプルコード2、5)
テストケースの実行前後
サブテスト実行内に記載します。(サンプルコード3、4)
それぞれの実装位置と実行順序は次のコードの通りです。事後処理は defer を用いることで簡潔に記述できます。
func TestMain(m *testing.M) {
// 1. テスト全体の実行前
setup()
// 6. テスト全体の実行後
defer teardown()
m.Run()
}
func setup() {
// setup code
}
func teardown() {
// tear down code
}
func TestHoge(t *testing.T) {
type args struct {
a int
b int
}
tests := []struct {
name string
args args
want string
}{
// テストケース
}
// 2. テスト関数の実行前
defer func() {
// 5. テスト関数の実行後
}()
for _, tt := range tests {
t.Run ...Read now
Unlock full access