gRPC サービスの単体テストは、アプリケーションの正しい動作を保証するために不可欠です。 Go は、gRPC サービスをテストするためのさまざまなパッケージとツールを提供しており、機能とエラー処理を検証できます。
1 つのアプローチは、google.golang.org/grpc/ を使用することです。 test/bufconn パッケージ。この手法を使用すると、実際のネットワーク接続やポート番号に依存せずに gRPC サービスをテストできます。
import "google.golang.org/grpc/test/bufconn" // ... Create and start gRPC server as usual ... const bufSize = 1024 * 1024 var lis *bufconn.Listener // Dial function for bufconn func bufDialer(context.Context, string) (net.Conn, error) { return lis.Dial() } // ... // ... Define test helper functions and tests ...
テスト内で、予想される動作をアサートし、サービスの動作を検証できます。応答。 Go は、値が期待される結果と一致するかどうかを確認できる testing.T などのさまざまなアサーション ライブラリを提供します。例:
func TestSayHello(t *testing.T) { // ... Dial and create client ... resp, err := client.SayHello(ctx, &pb.HelloRequest{"Dr. Seuss"}) if err != nil { t.Fatalf("SayHello failed: %v", err) } if resp.Message != "Hello Dr. Seuss" { t.Errorf("Unexpected response message: %q", resp.Message) } }
エラー関連のシナリオをテストする場合、カスタム入力を提供して、サービスが適切に応答することを確認できます。たとえば、無効なリクエストが予期したエラーを返すかどうかを確認できます。
func TestSayHello_InvalidRequest(t *testing.T) { // ... Dial and create client ... resp, err := client.SayHello(ctx, &pb.HelloRequest{}) if err == nil { t.Error("SayHello should have returned error for empty request") } }
bufconn アプローチでは、クライアントとサーバーの両方の相互作用をテストできます。複数の接続を作成して、さまざまなクライアント要求をシミュレートし、サーバーがどのように応答するかを検証できます。これにより、サービスの機能と動作の堅牢なテストが可能になります。
テストが失敗した場合は、次の点を確認してください。
ローカル テストに bufconn を使用すると、gRPC サービスをテストする便利な方法が提供されます外部のネットワークインフラストラクチャを介さずに。アサーションとエラー処理の検証により、適切な機能が保証されます。これらの手法に従うことで、Go で gRPC サービスの包括的で信頼性の高い単体テストを実現できます。
以上がBufconn を使用して Go で gRPC サービスを効果的に単体テストする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。