翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
よくある質問
他のサービスを呼び出さずに計算を実行して結果を返す Lambda 関数があります。クラウドでのテストが本当に必要ですか?
はい。Lambda 関数には、テストの結果を変更する可能性のある設定パラメータがあります。すべての Lambda 関数コードは、タイムアウトとメモリの設定に依存しており、これらが正しく設定されていないと関数が実行されない可能性があります。Lambda ポリシーでは、Amazon CloudWatch
クラウドでのテストはユニットテストにどのように役立ちますか? クラウド内にあり他のリソースに接続しているとしたら、それは統合テストではありませんか?
ユニットテストは、当社では、アーキテクチャコンポーネントで個別に実行されるテストと定義されています。この定義は、サービスの呼び出しやその他ネットワーク通信の使用を必ずしも排除するものではありません。
多くのサーバーレスアプリケーションには、クラウドでも個別にテストできるアーキテクチャコンポーネントを備えています。基本的な例が、入力を受信し、これを処理し、SQS キューにメッセージを送信する Lambda 関数です。こうした関数のユニットテストは、入力値によってキューに入れられたメッセージに、特定の値が存在するかどうかをテストするといったものになります。例えば、アレンジ、アクト、アサートというパターンで書かれたテストを考えてみましょう。
-
アレンジ: リソース (メッセージを受信するキュー、およびテスト対象の関数) を割り当てます。
-
アクト: テスト対象の関数を呼び出します。
-
アサート: 関数から送信されたメッセージを取得し、出力を検証します。
モックテストのアプローチでは、プロセス内のモックオブジェクトでキューをモックし、Lambda 関数コードを含むクラスまたはモジュールのプロセス内インスタンスを作成します。アサート段階では、キューに入れられたメッセージはモックされたオブジェクトから取得されます。
クラウドベースのアプローチでは、テスト用に SQS キューを作成し、分離された SQS キューを出力先として使用するように設定された環境変数を使用して、Lambda 関数をデプロイします。Lambda 関数の実行後に、テストでメッセージを SQS キューから取得します。
クラウドベースのテストでは、同じコードを実行し、同じ動作をアサートして、アプリケーションの機能が正しいことを検証します。ただし、Lambda 関数の設定 (IAM ロール、IAM ポリシー、関数のタイムアウトとメモリの設定) を検証できるという利点もあります。