サマリ
go でのprivate methodをテストでcallする方法
テスト手順
goでprivateメソッドをテストファイルからcallする場合には、同一package内においてはファイルが異なっても、同じpackage内に存在するprivate methodを呼ぶことができる というgoの仕様を利用します。
goではrailsのrspecのようにテストをする場合に、専用のspecディレクトリを用意してもいいですが、private methodのテスト等を考慮した場合に、同一package内にテストファイルも配置することが多いです。
例えば以下のようなpackage構成になります
model user.go user_test.go
※ テストファイルへの物理的な移動距離が少なくて僕はこのテストの構成は非常に開発者に優しいと思っています。
実際にテストを書いてみます。
今回つかってリポジトリはこちら
ディレクトリ構成は以下のようにしました。
src main.go test sample.go sample_test.go
実際にテストファイルを書いてみます。
// sample.go package test import "fmt" func PublicMethod(){ fmt.Printf("public method: %s \n", "") } func privateMethod(){ fmt.Printf("private method: %s \n", "") }
// sample_test.go package test import "testing" func TestPublicMethod(t *testing.T) { t.Logf("test public method","") PublicMethod() } func TestPrivateMethod(t *testing.T){ t.Logf("test private method","") privateMethod() }
実際にテストを動かしてみます。
$ go test -run ./test public method: private method: PASS ok test 0.006s
package test内であればprivateメソッドでもcall出来ます。
こうすればprivateメソッドを簡単にテストすることが出来ます。
まとめ
goのprivateメソッドをcallするところで少しハマったので、備忘録に簡単にまとめました。