首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何覆盖在GoMock中进行的调用?

如何覆盖在GoMock中进行的调用?
EN

Stack Overflow用户
提问于 2019-08-12 16:14:07
回答 1查看 1.7K关注 0票数 0

我正在尝试编写单元测试,模拟使用GoMocks进行的服务调用,这真的是一件很艰难的事情。

我试图简化代码的一种方式是创建一个私有方法,为所有模拟调用提供良好的响应,然后在每个需要模拟调用的不同响应的单独测试中(例如,测试模拟失败),我希望用不同的响应覆盖该调用。

例如,setupMocks fn (已擦洗)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func setupMocks(s *SSAdapterV1Suite, userId string) {
    s.mockDBDao.EXPECT().Mark(userId, gomock.Any()).
        Return(nil)
    s.mockDBDao.EXPECT().Get(userId).
        Return(userData, nil)
    s.mockDBDao.EXPECT().Delete(gomock.Any(), gomock.Any()).
        Return(nil)
}

当我在“成功”场景中使用setupMocks fn时,它工作得很好。

然而,如果我试图在另一个单元测试中使用它,我想测试如何处理服务调用中的错误,gomocks将使用setupMocks fn中的mockResponse设置,而不是我想用来覆盖的设置。

我是否可以在GoMocks中调用或做些什么来用其他东西覆盖模拟的EXPECT()响应,而不是附加callstack

EN

回答 1

Stack Overflow用户

发布于 2019-08-12 16:21:41

在提供此功能的GoMocks代码中,我确实没有看到任何类型的方法。

我看到的一种方式是,您可以手动操作gomock控制器中的callstack,以尝试获得您想要的东西。不过,这可能比它的价值更复杂。幸运的是,我发现了一种更简单的解决方法,可以查看此线程中的注释:https://github.com/golang/mock/issues/137#issuecomment-440370200

您可以做的是在调用setupMocks()之前调用您的重写。通过以相反的顺序进行覆盖,您将获得您想要的效果。

例如,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func (s *SSAdapterV1Suite) DeleteFails_Returns500() {
    // Setup
    req := makeRequest()

    // Overrides need to go before setupMocks as a workaround for no mock override support.
    // This may change in the future (c.f., https://github.com/golang/mock/issues/137#issuecomment-440370200)
    expectedErrMsg := fmt.Errorf("Forced failure")
    s.mockDBDao.EXPECT().
        Delete(gomock.Any(), gomock.Any()).
        Return(expectedErrMsg)
    setupMocks(s, req.GetUserID())

    // Run
    resp, _ := s.server.RunTheThing(context.Background(), req)

    // Assert
    require.Equal(s.T(), int32(http.StatusInternalServerError), resp.GetStatus().GetCode())
    require.Equal(s.T(), "", resp.GetStatus().GetError())
}

注创建模拟结构并将其连接到ctrl是在SetupTests() fn中完成的,并作为变量连接到SSAdapterV1Suite。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57464702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文