emahiro/b.log

日々の勉強の記録とか育児の記録とか。

goでprivateメソッドをテストする

サマリ

go でのprivate methodをテストでcallする方法

テスト手順

goでprivateメソッドをテストファイルからcallする場合には、同一package内においてはファイルが異なっても、同じpackage内に存在するprivate methodを呼ぶことができる というgoの仕様を利用します。
goではrailsrspecのようにテストをする場合に、専用のspecディレクトリを用意してもいいですが、private methodのテスト等を考慮した場合に、同一package内にテストファイルも配置することが多いです。

例えば以下のようなpackage構成になります

model
   user.go
   user_test.go

※ テストファイルへの物理的な移動距離が少なくて僕はこのテストの構成は非常に開発者に優しいと思っています。

実際にテストを書いてみます。

今回つかってリポジトリはこちら

github.com

ディレクトリ構成は以下のようにしました。

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するところで少しハマったので、備忘録に簡単にまとめました。