unit-testing - 意外调用 mock (gomock) gRPC

标签 unit-testing go grpc grpc-go gomock

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

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

但是,我有如下所示的 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)

Go 新手,你能帮帮我吗?

附加信息:

  • gomock模式(来源):来源
  • gomock 版本或 git ref:github.com/golang/mock v1.4.3
  • golang版本:go版本go1.14 darwin/amd64

最佳答案

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

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

可以引用这个:gomock-blog

你可以看到这一行 crankingCircuit.EXPECT().RotateShaft().Return(nil).Times(2) 告诉 mock_client 期待函数 RotateShaft

的调用

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

关于unit-testing - 意外调用 mock (gomock) gRPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62507816/

相关文章:

python - gRPC Python thread_pool 与 max_concurrent_rpcs

c++ - "Catch"单元测试框架 - REQUIRE_THROWS_AS

c# - 单元测试应用程序_开始

ruby-on-rails - Rspec:期望模块接收方法

c# - 如何在 UnitTest asp.net 中使用应用程序变量

go - Protoc 不创建服务

go - 如何通过 Go 的 MaxBytesReader 确定我是否达到了大小限制

Golang - 我可以有一个带有 slice 成员的结构吗?

grpc - gRPC 中丰富的错误处理模式

node.js - 缺少 node-v59-linux-x64/grpc_node.node