Gomock for mongo

I am trying to use mockgen for using gomock writing some unit test cases

Method I want to test

// Create - inserts data into mongo database
func Create(dbName, collectionName string, d interface{}) error {
	mongo, err := GetS(dbName)
	if err != nil {
		return err
	}
	defer mongo.Close()
	err = mongo.DB(dbName).C(collectionName).Insert(d)
	if err != nil {
		return err
	}
	return nil
}```

func GetS(dbName string) (*mgo.Session, error) {
ctx := apiContext.TContext{}
url, err := connectionURLList.get(dbName)
if err != nil {
log.GenericWarning(ctx,
fmt.Sprintf(“connection to %s not yet created, creating one: %v”, dbName, err), nil)
if err := connectMongo(dbName); err == nil {
return GetS(dbName) //singleton recursion to again call GetS
}
return nil, err
}
// ignoring error, expected we will always setting session in session map
session, _ := connectionList.get(url)
return session.Copy(), err
}


Interface 

package doers

type MongoManager interface {
GetS(tenantName string) error
}

mock implementation 
```// Code generated by MockGen. DO NOT EDIT.
// Source: ../doers (interfaces: MongoManager)

// Package mocks is a generated GoMock package.
package mocks

import (
	gomock "github.com/golang/mock/gomock"
	reflect "reflect"
)

// MockMongoManager is a mock of MongoManager interface
type MockMongoManager struct {
	ctrl     *gomock.Controller
	recorder *MockMongoManagerMockRecorder
}

// MockMongoManagerMockRecorder is the mock recorder for MockMongoManager
type MockMongoManagerMockRecorder struct {
	mock *MockMongoManager
}

// NewMockMongoManager creates a new mock instance
func NewMockMongoManager(ctrl *gomock.Controller) *MockMongoManager {
	mock := &MockMongoManager{ctrl: ctrl}
	mock.recorder = &MockMongoManagerMockRecorder{mock}
	return mock
}

// EXPECT returns an object that allows the caller to indicate expected use
func (m *MockMongoManager) EXPECT() *MockMongoManagerMockRecorder {
	return m.recorder
}

// GetS mocks base method
func (m *MockMongoManager) GetS(arg0 string) error {
	ret := m.ctrl.Call(m, "GetS", arg0)
	ret0, _ := ret[0].(error)
	return ret0
}

// GetS indicates an expected call of GetS
func (mr *MockMongoManagerMockRecorder) GetS(arg0 interface{}) *gomock.Call {
	return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetS", reflect.TypeOf((*MockMongoManager)(nil).GetS), arg0)
}

testing

func TestCreate(t *testing.T) {

	var d document
	d.Book = "myBooks"
	d.Subject = "mySubject"
	d.IsActive = true

	mockCtrl := gomock.NewController(t)
	mongoMock := mocks.NewMockMongoManager(mockCtrl)
	errConnect := connectMongo("mydb")
	if errConnect == nil {
	addr, err := connectionList.connect("mydb")
	if err != nil {
		t.Error(err)
		} else {
			connectionURLList.set("mydb", addr)
			err := mongoMock.EXPECT().GetS("mydb").Return(nil)
			if err != nil {
			t.Error("invalid ")
			} else {
				err := Create("mydb" ,"books" , d)
				if err != nil {
					t.Error(err)
				}
			}

		}
	}

}

Output 

charles@Apples-MacBook-Pro-2 mongoManager (CDMS-6671) $ go test
— FAIL: TestCreate (0.00s)
collection_test.go:42: invalid
FAIL
exit status 1
FAIL bitbucket.org/tekion/tbaas/mongoManager 0.067s

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.