Как добавить функции клонирования и копирования в Mocking MongoDB в Go? - PullRequest
0 голосов
/ 28 апреля 2018

Я прочитал эту статью , и в ней есть хорошие руководства по издевательству над MongoDB в Go. Но есть некоторые проблемы в методах Clone() и Copy(). Я создаю эти интерфейсы и структуры:

type ISession interface {
    DB(name string) IDatabase
    Close()
    Clone() ISession
    Copy() ISession
}

type IDatabase interface {
    C(name string) ICollection
}

type MongoSession struct {
    dbSession *mgo.Session
}

func (s MongoSession) DB(name string) IDatabase {
    return &MongoDatabase{Database: s.dbSession.DB(name)}
}

func (s MongoSession) Clone() ISession {
    //return session.clone
    return s.dbSession.Clone()
}

func (s MongoSession) Copy() ISession {
    return s.dbSession.Copy()
}

Но я получил эту ошибку

не может использовать s.dbSession.Clone () (тип * mgo.Session) в качестве типа ISession в возвращаемый аргумент: * mgo.Session не реализует ISession (неправильный тип для метода Clone) есть Clone () * mgo.Session хотите Clone () ISession

не может использовать s.dbSession.Copy () (тип * mgo.Session) в качестве типа ISession в возвращаемый аргумент: * mgo.Session не реализует ISession (неправильный тип для метода Clone) есть Clone () * mgo.Session хотите Clone () ISession

Как я могу добавить Clone() и Copy() методы для интерфейса?

1 Ответ

0 голосов
/ 28 апреля 2018

MongoSession.Copy() и MongoSession.Clone() должны возвращать значение, которое реализует ISession. В основном вы создаете тип MongoSession именно для этого: для реализации ISession.

mgo.Session не реализует ваш интерфейс ISession (например, потому что его метод Session.Clone() имеет тип возврата *mgo.Session, а не ISession). Вам следует создать и вернуть новое значение MongoSession, в которое можно перенести скопированное или клонированное значение *mgo.Session.

Как это:

func (s MongoSession) Clone() ISession {
    return MongoSession{dbSession: s.dbSession.Clone()}
}

func (s MongoSession) Copy() ISession {
    return MongoSession{dbSession: s.dbSession.Copy()}
}
...