実際のクライアント実装をスタブして、単体テスト用のモックを挿入する方法を学びます。 Rust 用の Google Cloud クライアント ライブラリでモック クライアントを使用すると、ネットワーク呼び出しを行わず、課金も発生しない、制御された信頼性の高い単体テストを 作成できます。
依存関係
Rust では、いくつかのモック フレームワークを使用できます。このガイドでは、
mockall を使用します。開発依存関係として追加します。
cargo add --dev mockall
また、このガイドでは、例をわかりやすくするために Speech クライアントを使用します(ただし、これらのコンセプトはすべてのクライアントに適用されます)。
必要な依存関係を Cargo.toml ファイルに追加します。
cargo add google-cloud-speech-v2 google-cloud-lro
クライアントをモックする
モック クライアントを使用してコードをテストするには、モック構造体を定義し、テスト シナリオの想定される動作を構成して、そのモックをアプリケーション ロジックに挿入します。次の例は、このワークフローを示しています。
まず、use ステートメントを追加してコードを簡素化します。
アプリケーションに、Speech クライアントを使用して GetRecognizer を呼び出し、リクエストの name フィールドを設定して、サーバーのレスポンスを処理する関数があるとします。
アプリケーションがサービスからのさまざまなレスポンスをどのように処理するかをテストできます。
次に、モック構造体を定義します。この構造体は、
speech::stub::Speech トレイトを実装します。
モックのインスタンスを作成します。
mockall::mock! マクロは、事前に定義した構造体の名前の先頭に Mock 接頭辞を付けます。
モックに想定される動作を設定します。たとえば、特定の名前で GetRecognizer を呼び出し、サービスからの成功レスポンスをシミュレートするようにコードを設定します。
モックを使用して Speech クライアントを作成します。
関数を呼び出す
結果を確認します。
エラーをシミュレートする
エラーのシミュレーションは、成功のシミュレーションと似ています。エラーをシミュレートするには、モックから返される結果を変更します。
from_stub() でビルドされたクライアントには内部再試行ループがありません。スタブからのすべてのエラーをアプリケーションに直接返します。
次のステップ
このガイドの完全なコードを表示するには、GitHub の google-cloud-rust リポジトリの ソースファイルをご覧ください。