技術メモ

技術メモ

ラフなメモ

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

簡単ですが、このようにしてランダムな値をモックすることができます。