今、以下のようなGoのコードのテストをgomockを用いて書こうとしています
golang
1type HogeService interface { 2 Fuga() (*model.User, error) 3} 4type hogeServiceImpl struct { 5 UserRepository repository.UserRepository 6} 7 8func NewHogeService( 9 userRepository repository.UserRepository, 10 11) HogeService { 12 return &hogeServiceImpl{ 13 UserRepository: userRepository, 14 } 15} 16 17func (s *hogeServiceImpl) Fuga() (*model.User, error) { 18 (略) 19 user, err := s.UserRepository.Get(userID) 20 (略) 21 return &model.User{ 22 ID: user.ID, 23 }, nil 24}
テスト
golang
1func TestFuga(t *testing.T) { 2 ctrl := gomock.NewController(t) 3 defer ctrl.Finish() 4 userRepository := mock.NewMockUserRepository(ctrl) 5 impl := NewHogeService( 6 userRepository, 7 ) 8 9 t.Run("", func(t *testing.T) { 10 got, err := impl.Fuga() 11 expected := &model.User{ 12 ID: "hogehoge", 13 } 14 assert.Equal(t, expected, got) 15 assert.Equal(t, err, nil) 16 }) 17} 18
このテストを実行すると、以下のようなエラーでコケてしまいます
bash
1$ go test hoge_service.go hoge_service_test.go 2--- FAIL: TestFuga (0.00s) 3 hoge_service.go:89: Unexpected call to *mock_repository.MockUserRepository.Get([hogehoge]) at /path/hoge_service.go:89 because: there are no expected calls of the method "Get" for that receiver 4 --- FAIL: TestFuga/#00 (0.00s) 5 testing.go:1048: test executed panic(nil) or runtime.Goexit: subtest may have called FailNow on a parent test 6FAIL 7FAIL command-line-arguments 0.310s 8FAIL
解決方法をご存知の方がいらっしゃいましたら教えていただきたいです????♀️
やったこと
- エラー分でググったところ以下のような記事にヒットしましたが、本番コードを呼び出す前にモックを設定しているので問題なさそうでした
https://github.com/golang/mock/issues/260#issuecomment-459513204
- mockの
Get
メソッドに到達していないのかと思いましたが、logを仕込みましたがmockのGet
メソッドには到達していました
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。