Go開発入門 テーブル駆動テストと並列実行


はじめに

テーブル駆動テストとは、
インプットとアウトプットのテーブルについて
1行ずつテストを繰り返すことです。

テーブル駆動テストには、下記のようなメリットがあります。

  • 並列にテストが実行しやすい
  • テストケースの変更が容易
  • テストが読みやすい
  • テストがどこで失敗したのかがわかりやすい

本記事では、サンプルとして偶数判定のテーブル駆動テストを並列で実行することを体験します。
サンプルでは、go modを使用しています。

関数を作成

./is_even.go

package is_even

func IsEven(number int) bool {
  return (number % 2 == 0);
}

テストを作成

./is_even_test.go

// go test github.com/CobaltSato/mock/unit_test/is_even -parallel 2

package is_even_test

import (
	"testing"

	"github.com/CobaltSato/mock/unit_test/is_even"
)

func TestIsEven(t *testing.T) {
	t.Parallel()

	// テストケース
	cases := map[string]struct {
		in   int
		want bool
	}{
		"+odd":  {5, false},
		"+even": {6, true},
		"-odd":  {-5, false},
		"-even": {-6, true},
		"zero":  {0, true},
	}

	for name, tt := range cases {
		tt := tt                         // ローカル変数にコピー
		t.Run(name, func(t *testing.T) { // サブテストとして実行
			t.Parallel() // 並列実行
			if got := is_even.IsEven(tt.in); tt.want != got {
				t.Errorf("want IsEven(%d) = %v, got %v", tt.in, tt.want, got)
			}
		})
	}
}

テストを実行

go test . -parallel 2     

おわりに

Goの記事の初投稿です。
間違いありましたらご教授いただけると幸いです。