🐹
mockgenが2023年6月28日で読み取り専用になった
モック使うときにとても重宝していた mockgen が2023年6月28日をもって読み取り専用になってしまってしまったので、いろいろ新しいリポジトリに置き換えしたのでメモ
旧リポジトリ: https://github.com/golang/mock
新リポジトリ: https://github.com/uber/mock
大まかな流れ
- 古い mockgen を削除する
- 新しいリポジトリで mockgen をインストールする
- import を書き換える
- mock を再作成する
古いモジュールを削除する
$ go clean -i -n go get github.com/golang/mock/mockgen
$ whereis mockgen
mockgen: $GOPATH/bin/mockgen
$ rm -f $GOPATH/bin/mockgen
新しいリポジトリで mockgen をインストールする
$ go get go.uber.org/mock/mockgen
$ go install go.uber.org/mock/mockgen
import の書き換える
package usecase
import (
"testing"
"github.com/135yshr/go-confernce-mini-2022/domain/model"
repository "github.com/135yshr/go-confernce-mini-2022/domain/repository/mock"
//"github.com/golang/mock/gomock" // <- 削除
"go.uber.org/mock/gomock" // <- ここ
)
func TestUser(t *testing.T) {
t.Run("利用者ユースケース", func(t *testing.T) {
t.Run("ユースケースが正常に終了すること", func(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
repo := repository.NewMockUserRepository(ctrl)
repo.EXPECT().Insert(gomock.Any()).Return(nil)
sut := NewUserUsecase(repo)
if err := sut.Create(&model.User{}); err != nil {
t.Errorf("error should be nil, but got %v", err)
}
})
})
}```
## mock を再作成する
```bash
$ go generate ./...
余談
goコメントで mockgen を使用するように設定しておくと go generate
コマンドでモックが作成できるようになるので便利
package usecase
//go:generate mockgen -source=$GOFILE -destination=./mock/mock_$GOFILE -package=$GOPACKAGE
import (
"log"
"github.com/135yshr/go-confernce-mini-2022/domain/model"
"github.com/135yshr/go-confernce-mini-2022/domain/repository"
)
type UserUsecase interface {
Create(*model.User) error
}
Discussion