ぶろぐ

日記です

Goのテストパッケージの末尾に_testをつけるかつけないか問題


一行

原則つけたほうが良い。

違い

末尾に_testを付ける場合

対象のパッケージとは別物と認識され、private methodを呼び出すことはできなくなる。
ここでprivate methodのテストができないじゃないか問題が発生するが、外部に公開している振る舞いのテストが担保されていれば問題ないという考え方をベースにすればprivate methodのテストを行う必要は無いため問題ない。public methodを呼び出すことでprivate methodを疎通させてカバレッジをカバーすれば良い。

private methodまでテストを書くと、継続的にリファクタリングや機能追加を攻めて行うためにテストコードを書いているのに、それのメンテコストがかかり足を引っ張ってしまうことになるっぽい。例えば機能追加をしようと思ったらテストコードめっちゃ書き換えないといけない・・・とか。

どうしてもprivate methodのテストを行いたい場合は、_internal_test.goとかいう名前のファイルを作り別だしにして書いている人とかいるみたい。

末尾に_testをつけない場合

実コードと同じパッケージとみなされるため、private methodも含めすべて参照できる。詳細なテストが可能。
闇雲にすべてのテストを書くと見通しが悪くなることがあるのと、メンテのコストも掛かるので気をつけるべし。

どうするのが良いのか(個人的な意見)

原則として_testをつけて、このパッケージの利用者観点で振る舞いのテストが行えればOK。
private methodのテストも行いたい場合は_testをつけずにファイル名を_internal_test.goとしてテストコードを書く。
private methodのテストがとても重要なら、_testをつけずに xxx_test.go などのファイルにテスト書いてしまってもいいと思う。