IDのモックを作る
IDを生成する必要があるときにUUIDやxidを用いることがあります。テストの結果にIDが含まれてしまう場合にIDの生成をモックする方法を紹介します。本記事では rs/xid を用いてIDを生成することにします。ポイントは関数型の変数にすることです。もちろんインターフェースのメソッドすることでモックすることもできます。
- a.go
package a import ( "time" "github.com/rs/xid" ) var generateID = generateIDFunc func generateIDFunc(t time.Time) string { return xid.NewWithTime(t).String() }
- a_test.go
package a import ( "testing" "time" ) func TestGenerateID(t *testing.T) { generateID = func(t time.Time) string { return "test-id" } got := generateID(time.Now()) want := "test-id" if got != want { t.Errorf("wrong id, got=%v, want=%v", got, want) } }
$ go test -v === RUN TestGenerateID --- PASS: TestGenerateID (0.00s) PASS ok github.com/d-tsuji/go-sandbox/a 0.177s
簡単ですが、このようにしてランダムな値をモックすることができます。