sharefull/mockfuncを作った
December 23, 2021
年の瀬ですね。
シェアフル株式会社で副業をしておりまして、そこで作成したsharefull/mockfunc
について紹介します。
sharefull/mockfunc
はモック用の関数を作るためのパッケージです。テストでモック用の関数を作る際に使わない引数のせいで関数が無駄に長くなってしまったり、どの引数が使われていないのか分かりづらくなったりすることがあると思います。
sharefull/mockfunc
パッケージには関数を作成して、変数やフィールドに設定するSet
関数があります。Set
関数は、第1引数に*testing.T
型、第2引数に変数やフィールドへのポインタ、第3引数に関数を渡します。
第3引数の関数では、使用していない引数や戻り値の型としてmockfunc.Unused
型を使えるようになっています。また、使わない戻り値にゼロ値を返すために、mockfunc.UnusedValue
変数を用いることができます。実際に使う場合は、以下のように__
や___
で置き換えて使うと便利です。
// 不要な引数や戻り値に使用する
type __ = mockfunc.Unused // 型エイリアス
___ := mockfunc.UnusedValue
type Mock struct {
DoFunc func(ctx context.Context, id int) (n int, err error)
}
var m Mock
t := new(testing.T) // dummy
// 第1引数のcontext.Contextと第1戻り値は使わない
mockfunc.Set(t, &m.DoFunc, func(_ __, id int) (__, error) {
if id%2 == 0 {
return ___, errors.New("error") // ゼロ値とエラーを返す
}
return ___, nil // ゼロ値とnilを返す
})
// 0 <nil>
fmt.Println(m.DoFunc(context.Background(), 1))
// 0 error
fmt.Println(m.DoFunc(context.Background(), 2))
使わない引数が複数ある場合はfunc(_, _ __)
のようにまとめて書くことができるます。テストに不要な引数や戻り値を__
や___
と書くことで注目を避け、注目してほしい引数や戻り値に集中させることができます。テーブル駆動テストに用いると、テストケースを短く書くことができるため、見やすくなります。
ぜひ、年末年始のテストの大掃除に活用して頂ければと思います!
良いお年を!!