我有 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/