13.1 Goのテストの書き方の基礎

Goのすべての基礎となっているtestingパッケージの基本的な使い方を紹介します。次のコードがサンプルです。

リスト13-1: 基本的なテスト
package testsample

import "testing"

func Add(a, b int) int {
	return a + b
}

func TestAdd(t *testing.T) {
	got := Add(1, 2)
	if got != 3 {
		t.Errorf("expect 3, but %d", got)
	}
}

大事なポイントが4つあります。

1つめがファイル名とパッケージです。ファイル名の末尾が必ず_test.goで終わるようにします。ここに書かれないテストは識別されず、無視されます。パッケージ名はそのフォルダに入っているファイルと同じもの、あるいは_testを末尾につけた名前にします。後者はプロダクションコードと別パッケージになるため、公開要素しかテストできません。

次のポイントが関数定義で、Testから始まる名前にします。引数はt *testing.Tとします。このtはテスト結果を記録するインタフェースです。

3つ目がテストの検証です。まず、テスト対象の構造体や関数を利用するコードを書きます。その期待する結果と実際の結果が等しいかは通常のGoの文法やライブラリの関数を使って検証します。他のライブラリの紹介は後で行います。まずは通常のif文で検証しましょう。

4つ目が行ったテストが失敗していたら知らせることです。これにはt.Error()t.Errorf()を使います。これを呼び出された関数は「失敗した関数」として扱われます。

おめでとうございます!これでテストの書き方はおしまいです。他の言語でユニットテストを書いたことがある人にとって難しいと感じる点はないでしょう。実行には次のコマンドを利用します。これで動作しない場合はパッケージ名あたりが怪しいでしょう。 ...