注文アプリは外部配送APIを呼ぶ。APIがタイムアウトしたときに「注文を二重登録せず、再試行できる案内を出す」ことを、開発中の自動テストで毎回同じ条件で確認したい。外部事業者の本番環境に負荷をかけず、最も再現しやすい方法はどれか。
本サイトで独自に作成。IPAの試験問題からの転載ではありません。
公開日:
選択肢を選んで、答え合わせをしましょう。
回答せずに正解・解説を確認する
正解:ウ 配送APIの代わりに、決めた条件でタイムアウトを返すテスト用の代替実装を注入する
この表示だけでは、回答数や正答率は変わりません。
解説
外部APIとの境界を差し替えられるようにし、タイムアウトを決まった条件で再現する代替実装を使います。これにより外部環境の状態に左右されず、登録件数や画面の案内が期待どおりかを自動で確認できます。失敗を起こす条件と確認する結果の両方を固定します。
発生時刻を制御できず、テストが不安定になります。毎回同じ条件という目的に合いません。
無関係な外部への負荷は適切でなく、タイムアウトの種類や発生位置も制御できません。
外部応答を制御できるので、同じ異常条件を安全に繰り返してアプリ側の動作を検証できます。
確認したいのは失敗時の動作です。成功だけでは二重登録防止や案内の確認ができません。
関連知識
テストダブルは外部依存などを置き換える実装の総称です。戻り値や失敗を用意するスタブ、呼出し内容を記録して検証する仕組みなど、目的に応じて使います。代替実装だけでは実APIとの接続仕様まで保証できません。
間違えやすいポイント
代替実装が期待どおりなら本番連携も必ず正しい、と考えないこと。アプリの異常処理のテストに加え、提供元の検証環境などで接続仕様を確かめます。
覚え方
外部の偶然を、制御できるテスト条件へ置き換える。
実務での意味
決済、メール、配送などの連携を設計する際、外部呼出しの境界を分け、成功・拒否・タイムアウトをそれぞれ再現できるようにします。
解説:本サイト編集部によるオリジナル文章