Как сделать метод ГПК-Мок Го-Ланг
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{}}