登录
首页 >  Golang >  Go问答

在调用测试函数时使用 grpc.SetHeader 或 grpc.SendHeader 无法设置标头

来源:stackoverflow

时间:2024-02-08 19:42:22 414浏览 收藏

哈喽!今天心血来潮给大家带来了《在调用测试函数时使用 grpc.SetHeader 或 grpc.SendHeader 无法设置标头》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我有一个函数可以在 grpc 标头中添加一些内容

func dummy(ctx context.context, request *service.request) error {
  err := grpc.setheader(ctx, metadata.pairs("key", "value"))
  return err
}

当它被服务调用时,它工作得很好。

为此编写单元测试用例时,它总是失败:

rpc 错误:代码 = 内部 desc = grpc:无法从上下文 context.todo 获取流

func TestDummy() {
 ctx := context.TODO()
 err := Dummy(ctx, &service.Request{})
}

我知道我可以模拟 grpc.setheader,但我不想这样做。还有其他方法可以解决这个问题吗?


正确答案


发生错误的原因是 context.todo() 内没有服务器流实现。您可以使用 grpc.NewContextWithServerTransportStream,而不是 context.todo()

虽然您仍然需要模拟 ServerTransportStream 接口,但这并不太复杂。事实上,这个接口的目的正是为了允许测试使用 grpc.setheader 的代码。

框架代码:

type mockServerTransportStream struct {}

func (m *mockServerTransportStream) Method() string {
    return "foo"
}

func (m *mockServerTransportStream) SetHeader(md metadata.MD) error {
    return nil
}

func (m *mockServerTransportStream) SendHeader(md metadata.MD) error {
    return nil
}

func (m *mockServerTransportStream) SetTrailer(md metadata.MD) error {
    return nil
}

func TestDummy() {
 ctx := grpc.NewContextWithServerTransportStream(&mockServerTransportStream{})
 err := Dummy(ctx, &service.Request{})
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>