13.2 Table Driven Testを実装する

GoのテストはTable Driven Test(以下、TDT)と呼ばれる形式で実装されることが大半です。Go公式のドキュメント 1 やGo公式のWiki 2 に記載されていて、標準パッケージのテスト 3でも利用されています。TDTはテスト形式として特殊なものではなく、PythonやJavaでparametrized testと呼ばれているテスト形式とよく似たものです。IDEで自動生成するテストコードの雛形もこのTDT形式ですし、Goでユニットテストを書く際は、まずTDTの形式に慣れることが大切です。

13.2.1 Table Driven Test とは

TDTはテストの入力値と期待値をまとめて定義し、テストの実行箇所を1箇所にまとめる形式のことです。テストの可読性を高め、コードの重複を排除できる点で優れています。以降で、各項目について整理していきます。

テスト対象として、以下の Calc()関数を例にします。

リスト13-2: テスト対象の関数
func Calc(a, b int, operator string) (int, error) {
	switch operator {
	case "+":
		return a + b, nil
	case "-":
		return a - b, nil
	case "*":
		return a * b, nil
	case "/":
		if b == 0 {
			return 0, fmt.Errorf("0除算は未定義です")
		}
		return a / b, nil
	}
	return 0, fmt.Errorf("予期しない演算子 %v が指定されました", operator ...