Unit testing 对mock(gomock)gRPC的意外调用

Unit testing 对mock(gomock)gRPC的意外调用,unit-testing,go,grpc,grpc-go,gomock,Unit Testing,Go,Grpc,Grpc Go,Gomock,我有一个gRPC服务(比如svc1),它调用另一个gRPC服务,使用它的gRPC存根(比如svc2_客户端) 我已经为svc2_客户端生成了客户端模拟。根据文档进行的单元测试工作正常,即使用生成的模拟测试svc2_客户端 但是,我有如下所示的svc1: // Synonymous to proto service generated. type Svc1 struct { rt svc2pb.Svc2Client } // Constructor to get Service. fun

我有一个gRPC服务(比如svc1),它调用另一个gRPC服务,使用它的gRPC存根(比如svc2_客户端)

我已经为svc2_客户端生成了客户端模拟。根据文档进行的单元测试工作正常,即使用生成的模拟测试svc2_客户端

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

// Synonymous to proto service generated.
type Svc1 struct {
    rt svc2pb.Svc2Client
}

// Constructor to get Service.
func NewSvc1(rt svc2pb.Svc2Client) *Svc1 {
    return &Svc1{rt}
}
...
...
预期行为
期待它成功

复制
复制行为的步骤:

返回一个错误:

=== 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

您试图调用一个尚未模拟的函数

基本上,当您执行mock_客户端并调用其中的函数时,您必须确保这些函数也被模拟。 您还必须为模拟函数提供自定义输入和自定义输出

您可以参考以下内容:

您可以看到这一行
crankingCircuit.EXPECT().RotateShaft().Return(nil).Times(2)
告诉mock_客户端期望调用函数
RotateShaft


根据API的不同,您必须更改mock函数中的输入参数和输出参数。

在这种情况下,我忘了调用
mock()
函数

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
        }

    })
}

你说“根据文档进行的单元测试工作正常”,但你说“期望它成功”,所以有些东西工作不正常。请您提供更多关于哪些有效,哪些无效的详细信息?另外,请提供重现该行为的步骤。复制步骤不是错误跟踪(这也很有用)。复制步骤是指其他人重新创建您看到的相同错误的指示。抱歉,我不清楚-正在工作-何时通过在客户端模拟上生成测试来验证客户端模拟。不工作-如上所述,即当服务必须调用grpc客户端存根(模拟)时。此服务上的单元测试失败,而直接在客户端存根上的单元测试工作正常。您找到方法了吗?让我们知道这里。我被同样的问题困住了。