Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在go中对gRPC服务进行单元测试_Go_Grpc_Grpc Go - Fatal编程技术网

如何在go中对gRPC服务进行单元测试

如何在go中对gRPC服务进行单元测试,go,grpc,grpc-go,Go,Grpc,Grpc Go,我在go中对gRPC服务进行单元测试时遇到困难 我看了看,但它对我不起作用,不确定我做错了什么 Add方法的gRPC服务实现: type server struct{} func main() { listener, err := net.Listen("tcp", ":4040") if err != nil { panic(err) } srv := grpc.NewServer() service.RegisterMathOpServ

我在go中对gRPC服务进行单元测试时遇到困难

我看了看,但它对我不起作用,不确定我做错了什么

Add方法的gRPC服务实现:

type server struct{}

func main() {
    listener, err := net.Listen("tcp", ":4040")
    if err != nil {
      panic(err)
    }

    srv := grpc.NewServer()
    service.RegisterMathOpServiceServer(srv, &server{})
    reflection.Register(srv)

    if e := srv.Serve(listener); e != nil {
          panic(e)
    }

    fmt.Println("Service is running on localhost:4040")
}

func (s *server) Add(ctx context.Context, request *service.AddRequest) 
(*service.AddResponse, error) {
    a, b := request.GetX(), request.GetY()
    result := a + b

    return &service.AddResponse{Answer: result}, nil
}
添加方法的单元测试:

type server struct{}

func main() {
    listener, err := net.Listen("tcp", ":4040")
    if err != nil {
      panic(err)
    }

    srv := grpc.NewServer()
    service.RegisterMathOpServiceServer(srv, &server{})
    reflection.Register(srv)

    if e := srv.Serve(listener); e != nil {
          panic(e)
    }

    fmt.Println("Service is running on localhost:4040")
}

func (s *server) Add(ctx context.Context, request *service.AddRequest) 
(*service.AddResponse, error) {
    a, b := request.GetX(), request.GetY()
    result := a + b

    return &service.AddResponse{Answer: result}, nil
}
包测试
进口(
“上下文”
pb“mathOp_服务/src/service”
“测试”
)
函数测试添加(t*testing.t){

s:=服务器{}看看您的代码组织,您似乎来自Java背景,将src和test放在各自的文件夹中。我在开始编写go时也遇到了同样的问题。我学到的是,最好将src和test放在同一个包和文件夹中,因此,要使代码习惯于go并得到解决删除同一包中的任何变量/方法引用。因此,在测试中,您只需要导入pb包


我还鼓励您查看Golang中的各种代码组织技术。

包是否相同?单元测试必须与
服务器的定义在同一个包中。
@Mark Yes,它们都在“main”中包。根据引用的SO答案,您需要导入生成的protobuf包-通常别名为
pb
。并通过
pb
包引用服务器RPC方法。@colminator谢谢。如何解决
未定义:服务器
错误?再次查看您的代码,您的
服务
似乎出现了要提供
pb
,请参见@Mark的注释。unittest没有
类型服务器的定义
——因此请确保包含定义顶行(
packagw XYZ
等)的源文件与test.go文件的定义匹配。