我无法在go中对gRPC服务进行单元测试。
我看了Testing a gRPC service,但它对我没有用,不确定我在做什么错。
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
}
添加方法的单元测试:
package test
import (
"context"
pb "mathOp_service/src/service"
"testing"
)
func TestAddition(t *testing.T) {
s := server{} <-- error occurs here
req := pb.AddRequest{X: int64(1), Y: int64(2)}
res, err := s.Add(context.Background(), req)
if res.Answer != 3 {
t.Error("Expected 1 + 2 to equal 3")
}
}
s := server{}
引发错误,提示undefined: server
。
我是Go
的新手,找不到解决此问题的解决方案。
答案 0 :(得分:1)
查看您的代码组织,似乎您来自Java背景,将src和test放在相应的文件夹中。当我开始写go的时候,我也为之挣扎。我了解到的是,最好将src和test放在同一个程序包和文件夹中,以便使代码习惯使用,并且还可以解析同一程序包中的所有变量/方法引用。因此,在测试中,您只需要导入pb软件包。
我还将鼓励您查看https://github.com/golang-standards/project-layout,了解Golang中的各种代码组织技术。