🐹

mockgenが2023年6月28日で読み取り専用になった

2023/06/29に公開

モック使うときにとても重宝していた mockgen が2023年6月28日をもって読み取り専用になってしまってしまったので、いろいろ新しいリポジトリに置き換えしたのでメモ

旧リポジトリ: https://github.com/golang/mock
新リポジトリ: https://github.com/uber/mock

大まかな流れ

  1. 古い mockgen を削除する
  2. 新しいリポジトリで mockgen をインストールする
  3. import を書き換える
  4. 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