func GetImagesList() {
conn, err := grpc.Dial(address, grpc.WithInsecure())
if err != nil {
Log.Info("did not connect: %v", err)
}
defer conn.Close()
// Get Client from the grpc connection
client := pb.NewGrpcClient(conn)
resp, err := client.GetImages(context.Background(),
&pb.ImageListRequest{})
}
如何模拟 GetImagesList GRPC 方法 请帮帮我。 谢谢
最佳答案
这里的部分问题是创建客户端的代码是您尝试使用模拟测试的代码。
使用接口(interface),您可以将模拟传递到您要测试的方法/函数中。第 1 步。将创建客户端的代码与您要注入(inject)模拟的代码分开。
你应该定义一个你试图模拟的接口(interface),它将允许你将实际/真实的实现换成一个假的/模拟的版本,比如:
type ImagesGetter interface {
func GetImages(ctx context.Context, in *pb.ImageListRequest) (*pb.ImageListResponse, error)
}
然后创建一个新的结构类型,允许您设置模拟/真实实现。
type Lister struct {
images ImagesGetter
}
func (l *Lister) GetImagesList() {
// trimmed, but the grpc client should be defined
// and constructed outside this function and passed
// in in the images field of the Lister.
resp, err := l.images.GetImages(ctx, &pb.GetImagesRequest)
// trimmed ..
}
您现在可以使用模拟实现构建新的 Lister
模型:
type mock struct {}
func (m *mock) GetImages(ctx context.Context, in *pb.ImageListRequest) (*pb.ImageListResponse, error) {
// do mock implementation things here
}
并使用它:
l := &Lister{images: &mock{}}
关于go - 如何做 Mock Go-lang GRPC 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50633986/