gomockを使用してモックを作成する
gomock とは
- ソースコードのinterfaceからモックモジュールを生成するツール
インストール
$ go install go.uber.org/mock/mockgen
- gomockは元々
github.com/golang/mock/mockgen
というリポジトリで公開されていたが、同リポジトリは2023年にフリーズされた
- 現在はuberがメンテナンスを引き継いでいるのでuberのリポジトリからインストールする
使い方
コマンド
$ mockgen -source=[対象] -destination=[出力先]
$ mockgen -source=example.go -destination=mock_example.go
Mockの使い方
func TestExample(t *testing.T) {
// モックの呼び出しを管理するControllerを生成
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
// モックの生成
mockExample := mock_example.NewMockExample(mockCtrl)
// テスト中に呼ばれるべき関数と帰り値を指定
mockExample.EXPECT().F().Return(nil)
}
オプション
参考資料
Appendix-1 go:generateタグを用いたモックの自動生成
-
go:generate
タグを利用することでgo genarate
コマンドで自動的にモックを生成することができる
//go:generate mockgen -source=$GOFILE -destination=../mock/$GOPACKAGE/$GOFILE
package example
type Example interface {
Hello() (string, error)
}
$ go generate ./...