如何进行模拟Go lang GRPC方法
如何做模拟GetImagesList GRPC方法请帮助我。如何进行模拟Go lang GRPC方法,go,mocking,glide-golang,Go,Mocking,Glide Golang,如何做模拟GetImagesList GRPC方法请帮助我。 谢谢这里您的部分问题在于创建客户机的代码,即您试图用模拟测试的代码 使用接口,您可以将模拟传递到您尝试测试的方法/函数中。第一步。将从要注入模拟的代码中拆分创建客户机的代码 您应该定义一个试图模拟的接口,它将允许您将实际/真实的实现替换为一个假/模拟版本,例如: func GetImagesList() { conn, err := grpc.Dial(address, grpc.WithInsecure()) if er
谢谢这里您的部分问题在于创建客户机的代码,即您试图用模拟测试的代码 使用接口,您可以将模拟传递到您尝试测试的方法/函数中。第一步。将从要注入模拟的代码中拆分创建客户机的代码 您应该定义一个试图模拟的接口,它将允许您将实际/真实的实现替换为一个假/模拟版本,例如:
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{})
}
然后创建一个新的结构类型,允许您设置模拟/真实实现
type ImagesGetter interface {
func GetImages(ctx context.Context, in *pb.ImageListRequest) (*pb.ImageListResponse, error)
}
现在,您可以使用模拟实现构建新的Lister模型:
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 ..
}
并使用它:
type mock struct {}
func (m *mock) GetImages(ctx context.Context, in *pb.ImageListRequest) (*pb.ImageListResponse, error) {
// do mock implementation things here
}
这里的部分问题是,创建客户机的代码是您试图用模拟测试的代码 使用接口,您可以将模拟传递到您尝试测试的方法/函数中。第一步。将从要注入模拟的代码中拆分创建客户机的代码 您应该定义一个试图模拟的接口,它将允许您将实际/真实的实现替换为一个假/模拟版本,例如:
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{})
}
然后创建一个新的结构类型,允许您设置模拟/真实实现
type ImagesGetter interface {
func GetImages(ctx context.Context, in *pb.ImageListRequest) (*pb.ImageListResponse, error)
}
现在,您可以使用模拟实现构建新的Lister模型:
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 ..
}
并使用它:
type mock struct {}
func (m *mock) GetImages(ctx context.Context, in *pb.ImageListRequest) (*pb.ImageListResponse, error) {
// do mock implementation things here
}
我们如何在没有连接接口的情况下为单元测试实例化客户端?无法对类似场景进行单元测试,其中1个RPC服务方法正在调用另一个RPC 2方法。若我们需要对RPC服务1进行单元测试,则必须通过RPC 2模拟客户端,但我无法实现此类模拟。我已经尝试过gomock-如果我们直接验证RPC2,它可以正常工作,但是在RPC服务1上,它返回一个错误,关于此方法不存在控制器。虽然是围棋新手,但我倾向于创建类似上面的东西,而不是依赖模拟框架,我们如何做到这一点?我们如何为没有连接接口的单元测试实例化客户端?无法对类似场景进行单元测试,其中1个RPC服务方法正在调用另一个RPC 2方法。若我们需要对RPC服务1进行单元测试,则必须通过RPC 2模拟客户端,但我无法实现此类模拟。我已经尝试过gomock-如果我们直接验证RPC2,它可以正常工作,但是在RPC服务1上,它返回一个错误,关于此方法不存在控制器。虽然是围棋新手,但我倾向于创建类似上面的东西,而不是依赖模拟框架,我们该怎么做呢?