Как сделать метод ГПК-Мок Го-Ланг

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 ответ

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

Используя интерфейс, вы можете передать макет в метод / функцию, которую вы пытаетесь проверить. Шаг 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{}}
Другие вопросы по тегам