首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gomock,Go,芒果包装,MongoMock

gomock,Go,芒果包装,MongoMock
EN

Stack Overflow用户
提问于 2018-02-23 10:53:53
回答 1查看 1.6K关注 0票数 1

我试图使用gomock来模拟下面的方法

代码语言:javascript
复制
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
}

我的界面

代码语言:javascript
复制
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)
}

我得到了下面的错误。有人能帮上忙吗

代码语言:javascript
复制
 $ go test

-失败: /Users/charles/workspace/src/bitbucket.org/tekion/tbaas/mongoManager/mongoManager_test.go:16 TestGetS (0.00s) mongoManager_test.go:20: TestGetS(0.00s)对*mocks.MockMongoManager.GetS的缺失调用(等于仙人掌组)*mocks.MockMongoManager.GetS mongoManager_test.go:20:由于缺少调用而中止测试

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-25 19:31:07

实际上,在您的接口中可以看到使用返回类型错误实现的方法。但是,您使用的方式就像它不返回任何内容一样,并将实现链接起来。只需删除返回类型的GetS

代码语言:javascript
复制
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函数中删除。

代码语言:javascript
复制
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)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48946174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档