gomock, go, пакет манго,MongoMock

Я пытаюсь издеваться над методом ниже, используя гомок

func GetS(tenantName string) (*mgo.Session, error) {
    ctx := apiContext.TContext{}
    url, err := connectionURLList.get(tenantName)
    if err != nil {
        log.GenericWarning(ctx,
            fmt.Sprintf("connection to %s not yet created, creating one: %v", tenantName, err), nil)
        if err := connectMongo(tenantName); err == nil {
            return GetS(tenantName) //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
}

Мой интерфейс

type MongoManager interface {
    GetS(tenantName string) 
}

func TestGetS(t *testing.T) {
    //var mgoCall *mgo.Session
    mockCtrl := gomock.NewController(t)
    defer mockCtrl.Finish()
    mockManagerObj := mocks.NewMockMongoManager(mockCtrl)
    mockManagerObj.EXPECT().GetS("cacargroup").Return(nil)
}

Я получаю сообщение об ошибке ниже. Может кто-нибудь помочь

 $ go test

--- FAIL: TestGetS (0.00s) mongoManager_test.go:20: пропущенные вызовы для *mocks.MockMongoManager.GetS(равно cacargroup) /Users/charles/workspace/src/bitbucket.org/tekion/tbaas/mongoManager/mongoManager_test.go:16 mongoManager_test.go:20: прервать тест из-за пропущенных вызовов (-ов). Статус выхода FAIL 1

1 ответ

Решение

Вы видите на самом деле метод в вашем интерфейсе, реализованный с возвращаемым типом ошибки. Но вы используете, как будто он ничего не возвращает и цепочки реализации. Просто удалите тип возврата GetS,

type fn func(string) (*mgo.Session, error)

type MongoManager interface {
    NewFunction(GetS, "cascade")
}

func TestGetS(t *testing.T) {
    //var mgoCall *mgo.Session
    mockCtrl := gomock.NewController(t)
    defer mockCtrl.Finish()
    mockManagerObj := mocks.NewMockMongoManager(mockCtrl)
    mockManagerObj.EXPECT().GetS("cacargroup").Return(nil)
}

Также вы должны удалить его из GetS функция тоже

func NewFunction(GetS fn, value string){
   GetS("cascade")
}

func GetS(tenantName string) (*mgo.Session, error){
    ctx := apiContext.TContext{}
    url, err := connectionURLList.get(tenantName)
    if err != nil {
        log.GenericWarning(ctx,
            fmt.Sprintf("connection to %s not yet created, creating one: %v", tenantName, err), nil)
        if err := connectMongo(tenantName); err == nil {
            return GetS(tenantName) //singleton recursion to again call GetS
        }
        return nil, err
    }
    // ignoring error, expected we will always setting session in session map
    session, _ := connectionList.get(url)
}
Другие вопросы по тегам