首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对模拟( gomock) gRPC的意外调用

对模拟( gomock) gRPC的意外调用
EN

Stack Overflow用户
提问于 2020-06-22 05:11:19
回答 2查看 9.2K关注 0票数 3

我有gRPC服务(比如svc1),它使用它的gRPC存根(比如svc2_client)调用另一个gRPC服务。

我已经为svc2_client生成了客户机模拟。根据文档编写的单元测试运行良好,即使用生成的模拟测试svc2_client。

但是,我有如下所示的svc1:

代码语言:javascript
复制
// Synonymous to proto service generated.
type Svc1 struct {
    rt svc2pb.Svc2Client
}

// Constructor to get Service.
func NewSvc1(rt svc2pb.Svc2Client) *Svc1 {
    return &Svc1{rt}
}
...
...

预期行为

期待它的成功

复制

复制行为的步骤:

返回一个错误:

代码语言:javascript
复制
=== RUN   TestMethod1Svc1

    TestMethod1Svc1: svc1.go:40: Unexpected call to *mock_svc2client.MockSvc2Client.Method1([context.Background.WithDeadline(2020-06-22 10:14:25.620736 +0530 IST m=+3.002262784 [2.999757626s]) key1:"1"  } ]) at ...server/mocks/svc2client_mock.go:65 because: there are no expected calls of the method "Method1" for that receiver
--- FAIL: TestMethod1Svc1 (0.00s)

新来的,你能帮帮我吗。

其他信息:

  • gomock模式(源):源
  • gomock版本或git参考: github.com/golang/mock v1.4.3
  • golang版本: go版本go1.14达尔文/amd64 64
EN

回答 2

Stack Overflow用户

发布于 2020-07-01 15:53:01

您正在尝试调用一个尚未被模拟的函数。

基本上,当您执行一个mock_client并在其中调用函数时,您必须确保这些函数也是模拟的。您还必须向模拟函数提供自定义输入和自定义输出。

您可以参考以下内容:gomock-博客

您可以看到这一行crankingCircuit.EXPECT().RotateShaft().Return(nil).Times(2)正在告诉mock_client期待函数RotateShaft的调用

根据API,您必须更改模拟函数中的输入参数和输出参数。

票数 3
EN

Stack Overflow用户

发布于 2020-12-08 12:59:07

也可以有这种情况,我忘了调用mock()函数。

代码语言:javascript
复制
for _, tt := range tests {
    t.Run(tt.name, func(t *testing.T) {
        tt.mock(tt.input)
        s := NewServiceServer(dbObject, queueObject)
        _, err := s.ListConstraint(ctx, tt.input)
        if (err != nil) != tt.isErr {
            t.Errorf("ServiceServer.ListC() error = %v, wantErr %v", err, tt.isErr)
            return
        }

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

https://stackoverflow.com/questions/62507816

复制
相关文章

相似问题

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