Как провести юнит-тестирование сервиса gRPC в го - PullRequest
0 голосов
/ 26 мая 2019

У меня проблемы с модульным тестированием службы gRPC на ходу.

Я посмотрел Тестирование службы gRPC , но она не работает для меня, не уверен, что я 'Я делаю неправильно.

Реализация службы gRPC для метода Add:

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
}

Модульный тест для метода Add:

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 и не могу найти решение, чтобы это исправить.

1 Ответ

1 голос
/ 27 мая 2019

Глядя на вашу организацию кода, кажется, что вы пришли из Java-фона, поместив src и протестировав соответствующие папки. Я тоже боролся с тем же, когда начал писать го. Из того, что я узнал, лучше иметь src и test в одном пакете и папке, поэтому код становится идиоматическим, и он также разрешает любые ссылки на переменные / методы в одном пакете. Так что в ваших тестах вам нужно только импортировать пакет pb.

Я также призываю вас взглянуть на https://github.com/golang-standards/project-layout для различных методов организации кода в Голанге.

...