如何做Mock Go-lang GRPC方法

时间:2018-05-31 23:05:37

标签: go mocking glide-golang

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方法请帮帮我。 感谢

1 个答案:

答案 0 :(得分:3)

这里的部分问题是创建客户端的代码是您尝试使用模拟测试的代码。

使用界面,您可以将模拟传递给您尝试测试的方法/函数。步骤1.将从您要注入模拟的代码中拆分创建客户端的代码。

你应该定义一个你试图模拟的接口,它允许你交换假/模拟版本的实际/真实实现,如:

Dim x as ...
Set x = ...Create(...)
Set PCache = x.CreatePivotTable(...)

然后创建一个新的结构类型,允许您设置模拟/实际实现。

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
}