type UserStore interface {GetUser(id int64) (User, error)}func (u *ShipmentCreator) getUserAddress(userID int64) (string, error) {user, err = u.userStore.GetUser(userID)// ...return user.Address, nil}func (u *ShipmentCreator) CreateShipment(userID int64) error {// ...addr, err = u.getUserAddress(userID)
func TestCreateShipment(t *testing.T) {// ...userStore := NewMockUserStore(t)userStore.EXPECT().GetUser(id: 1).Return(user, _a1: nil)// ...err = creator.CreateShipment(useID: 1)
Diff: 0: FAIL: (int64=1) != (int=1)mock UserStore.go:85: FAIL: GetUser(int)at: [/Users/slevgin/60landProjects/shipper/internal/mock_UserStore.go:56 /Users/slevgin/60landProjects/shipper/internal/mock_UserStore.go:85: FAIL: 0 out of 1 expectation(s) were met.The code you are testing needs to make 1 more call(s).at: [/Users/slevgin/60landProjects/shipper/internal/mock_UserStore.go:85 /opt/homebrew/Cellar/go/1.22.3/libexec/src/testing/FAIL: TestCreateShipment (0.00s)type UserStore interface {GetUser(id int64) (User, error)}
(int64=1) != (int=1)
func TestCreateShipment(t *testing.T) {// ...userStore := NewMockUserStore(t)userStore.EXPECT().GetUser(int64(1)).Return(user, _a:: nil)// ...err = creator.CreateShipment(userID: 1)
func TestCreateShipment(t *testing.T) {// ...userStore := NewMockUserStore(ctl)userStore.EXPECT().GetUser(id: 1).Return(user, _a1: nil)// ...err = creator.CreateShipment(userID: 1)
TestCreateShipmentshipment_creator.go:44: Unexpected call to *internal.MockUserStoreGomock.GetUser([1]) at /Users/stevgin/GoLandProjects/shipper/internal/expected call at /Users/stevgin/GoLandProjects/shipper/internal/shipment_creator_test.go:52 doesn't match the argument at index 0.Got: 1 (int64)Want: is equal to 1 (int)type UserStore interface {GetUser(id int64) (User, error)}
func TestCreateShipment(t *testing.T) {// ...userStore := NewMockUserStore(ctl)userStore.EXPECT().GetUser(int64(1)).Return(user, _a1: nil)// ...err = creator.CreateShipment(userId: 1)=== RUN TestCreateShipment--- PASS: TestCreateShipment (0.00s)PASS
func TestCreateShipment(t *testing.T) {// ...userStore = NewUserStoreMock(t).GetUserMock.Expect(id: 1).Return(user, err: nil)// ...err = creator.CreateShipment(userID: 1)}=== RUN TestCreateShipment--- PASS: TestCreateShipment (0.00s)PASS// Expect sets up expected params for UserStore.GetUserfunc (mmGetUser *mUserStoreMockGetUser) Expect(id int64) *mUserStoreMockGetUser {
func (u *ShipmentCreator) validate(userID int64) error {user, err = u.userStore.GetUser(userID)// ...if user.Country != "Russia" {return fmt.Errorf("address is not available for delivery")}return nil}func (u *ShipmentCreator) CreateShipment(userID int64) error {if err := u.validate(userID); err != nil {return err}// ...addr, err = u.getUserAddress(userID)
=== RUN TestCreateShipment--- PASS: TestCreateShipment (0.00s)PASS
=== RUN TestCreateShipmentshipment_creator.go:35: Unexpected call to *internal.MockUserStoreGomock.GetUser([1]) at /Users/stevgin/GolandProjects/shipper/internal/shipmentexpected call at /Users/stevgin/GolandProjects/shipper/internal/shipment_creator_test.go:67 has already been called the max number of times--- FAIL: TestCreateShipment (0.00s)
=== RUN TestCreateShipment--- PASS: TestCreateShipment (0.00s)PASS
type historyLogger interface {Log(s *Shipment) error}func (u *ShipmentCreator) CreateShipment() {// ...go func() {err = u.historyLogger.Log(s)// ...}()}
func TestShipmentCreator_CreateShipment(t *testing.T) {// ...resultCh := make(chan struct{})logger.EXPECT().Log(s).RunAndReturn(func(*Shipment) error {resultCh <- struct{}{}return nil})// ...creator.CreateShipment()}select {case <-resultCh:case <-time.After(time.Second):}
func wait(ctl xgomock.Controller) {timer := time.NewTimer(time.Second)for !ctl.Satisfied() {select {case <-time.After(time.Millisecond):case <-timer.C:return}}}func TestShipmentCreator_CreateShipment(t *testing.T) {ctl := gomock.NewController(t)defer wait(ctl)// ...logger.EXPECT().Log(s).Return(_a0: nil)// ...creator.CreateShipment()}
func TestShipmentCreator_CreateShipment(t *testing.T) {mc := minimock.NewController(t)defer mc.Wait(time.Second)// ...logger = NewHistoryLoggerMock(mc).LogMock.Expect(s).Return(err: nil)// ...creator.CreateShipment()
func TestShipmentCreator_CreateShipment(t *testing.T) {testCases := []struct {name stringuserStore UserStoreuserID int64wantErr assert.ErrorAssertionFunc}{{name: "first case",userID: 1,wantErr: assert.NoError,userStore: NewUserStoreMock(t).GetUserMock.Expect(id: 1).Return(User{ID: 1}, err: nil),},}for _, tc := range testCases {t.Run(tc.name, func(t *testing.T) {u := &ShipmentCreator{userStore: tc.userStore,}err := u.CreateShipment(tc.userID)tc.wantErr(t, err)})}}
=== RUN TestShipmentCreator_CreateShipment=== RUN TestShipmentCreator_CreateShipment/first_case--- PASS: TestShipmentCreator_CreateShipment (0.00s)--- PASS: TestShipmentCreator_CreateShipment/first_case (0.00s)PASS
name: "first case",userID: 1,wantErr: assert.NoError,userStore: NewUserStoreMock(t).GetUserMock.Expect(id: 1).Return(User{ID: 1}, err: nil),},{name: "second case",userID: 2,wantErr: assert.NoError,userStore: NewUserStoreMock(t).GetUserMock.Expect(id: 2).Return(User{ID: 2}, err: nil),},
=== RUN TestShipmentCreator_CreateShipment=== RUN TestShipmentCreator_CreateShipment/first_case=== RUN TestShipmentCreator_CreateShipment/second_case--- PASS: TestShipmentCreator_CreateShipment (0.00s)--- PASS: TestShipmentCreator_CreateShipment/first_case (0.00s)--- PASS: TestShipmentCreator_CreateShipment/second_case (0.00s)PASS
internal go test -v -test.run "TestShipmentCreator_CreateShipment/first_case" ./...=== RUN TestShipmentCreator_CreateShipment=== RUN TestShipmentCreator_CreateShipment/first_case=== NAME TestShipmentCreator_CreateShipmentuser_store_mock_test.go:342: Expected call to UserStoreMock.GetUser at/Users/slevgin/GolandProjects/mock_conf/internal/table_minimock_test.go:31 with params: internal.UserStoreMockGetUserParams{id:2}--- FAIL: TestShipmentCreator_CreateShipment (0.00s)--- PASS: TestShipmentCreator_CreateShipment/first_case (0.00s)FAILFAIL github.com/zcollect/shipper/internal 0.269sFAIL
name: "first case",userID: 1,wantErr: assert.NoError,userStore: NewUserStoreMock(t).GetUserMock.Expect(id: 1).Return(User{ID: 1}, err: nil),
func NewUserStoreMock(t minimock.Tester) *UserStoreMock {// ...t.Cleanup(m.MinimockFinish)// ...return m}
func TestShipmentCreator_CreateShipment(t *testing.T) {tests := []struct {// ...userStoreFn func(t *testing.T) UserStore}{{// ...userStoreFn: func(t *testing.T) UserStore {return NewUserStoreMock(t).GetUserMock.Expect(id: 1).Return(User{ID: 1}, err: nil)},// ...},}for _, tt := range tests {t.Run(name, func(t *testing.T) {u := &ShipmentCreator{userStore: tt.userStoreFn(t),}err := u.CreateShipment(userID)})}}
internal go test -v -test.run "TestShipmentCreator_CreateShipment/first_case" ./...=== RUN TestShipmentCreator_CreateShipment=== RUN TestShipmentCreator_CreateShipment/first_case--- PASS: TestShipmentCreator_CreateShipment (0.00s)--- PASS: TestShipmentCreator_CreateShipment/first_case (0.00s)PASSok github.com/zoolleen/shipper/internal 0.691s