Как использовать метод GRPC Mock Go-lang - PullRequest
0 голосов
/ 01 июня 2018
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 голосов
/ 01 июня 2018

Часть вашей проблемы здесь заключается в том, что код, который создает клиент, - это код, который вы пытаетесь протестировать с макетом.

Используя интерфейс, вы можете передать макет в метод / функцию, которыеВы пытаетесь проверить.Шаг 1. будет разделять код, который создает клиент, из кода, в который вы хотите внедрить макет.

Вы должны определить интерфейс, который вы пытаетесь смоделировать, это позволит вам поменять местами фактический/ Реальная реализация для поддельной / фиктивной версии, что-то вроде:

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{}}
...