13.4 ヘルパー関数

テストを実行する際に、共通する処理を行うヘルパー関数を準備するのは一般的な手法です。ヘルパー関数内が t *testing.T の引数を取る場合は、 t.Helper() を呼ぶようにすると、テスト失敗時にノイズとなるようなヘルパー関数の情報が減り、メッセージがわかりやすくなります。もう1つの注意点は、テスト用のヘルパー関数をプロダクションコード(プロダクトとして実際に動作するコード)のビルドに含ませないように気をつけることです。テスト用のヘルパー関数は以下の2つの方法のいずれかで提供させます。

13.4.1 ヘルパー関数を_test.goというテストコードの中に書く

ファイルの末尾が _test.go であればビルドからは除外されるため、この特性を利用した手法です。もっともシンプルで一般的ですが、テストコードは他のパッケージからimportできないため、複数パッケージを横断したヘルパー関数の扱いには適しません。ファイル名は helper_test.goパッケージ名_helper_test.go などがよく使われます。

13.4.2 テストヘルパー用のパッケージを作成する

testutiltestonly といった名称でテストコードとは別パッケージを作成し、 _test.go が末尾に付かない通常のGoファイルでヘルパー関数を定義します。この時、テストコードからしかimportしなければ、プロダクションコードのビルドには含まれないため問題にはなりません。この方法だと複数のパッケージにまたがる共通的なヘルパー関数を扱うことができます。あるパッケージの機能をモックするようなヘルパーの場合は、 パッケージ名test といった名称も良く見かけます。 ...