用bufconn包对Golang gRPC客户端和服务器应用程序进行单元测试

296 阅读1分钟

在这个例子中,我们将创建一个简单的gRPC客户端和服务器应用程序。我们不使用第三方的嘲弄包,而是使用Golang本地的bufconn包进行测试。

bufconn可以帮助你启动一个服务器,但不是在一个真正的套接字/端口上,这很好。你的测试客户端对它的调用就像通过一个真实的端口与一个真实的服务器对话一样。这个包最好的一点是,你的测试实际上是在与真实的网络行为进行交互。所有这些都发生在内存连接上,而不是传统的操作系统级别的资源。你仍然可以通过一个端口获得正常的网络连接的预期行为。

先决条件

安装gRPC

go get -u google.golang.org/grpc

安装protobuf

# MacOS

安装protoc-gen-go

go get -u github.com/golang/protobuf/protoc-gen-go

安装bufconn

go get -u google.golang.org/grpc/test/bufconn

服务器

结构

├── Makefile

文件

制作文件
.PHONY: compile
pkg/proto/bank/account/deposit.proto
syntax = "proto3";
pkg/proto/bank/account/deposit.pb.go

这个文件是用make compile 命令生成的,所以不显示内容。

cmd/server/main.go
package main
internal/bank/account/deposit_server.go
package account
internal/bank/account/deposit_server_test.go
package account

客户端

结构

├── Makefile

文件

制作文件
.PHONY: compile
pkg/proto/bank/account/deposit.proto
syntax = "proto3";
pkg/proto/bank/account/deposit.pb.go

这个文件是用make compile 命令生成的,所以不显示内容。

cmd/client/main.go
package main
internal/bank/account/deposit_client.go
package account
internal/bank/account/deposit_client_test.go
package account

测试

服务器

$ go test -v -run TestDepositServer_Deposit ./internal/bank/account/

客户端

$ go test -v -run TestDepositClient_Deposit ./internal/bank/account/