テストサーバーの障害を統合する方法(http 500)
タイトルのように:500 HTTP応答を返す統合テストサーバーの障害をどのようにして行うのですか?
例:
POST
上のファイルを受け入れ、サーバーのファイルシステムに保存する/save
エンドポイントを持つサーバーがあります- ライブラリー/依存関係
X
があり、ファイル保存機能をアプリケーションの他の端のどこかで処理します X
はいくつかの理由で失敗する可能性がありますが、この例では、ディスクにスペースがないためにクラッシュするとします。- プロセスをクラッシュさせる代わりに、HTTP 500をスローしたい
この状況で何をしますか?
X
をモックして、実際にテストでエラーをスローしますか?- これらの種類のテストを省略して、グローバルにどこかでエラーを処理しますか?
- 統合テストでハッピーパスをテストし、エラーケースを無視してユニットテストでテストしますか?
- 他に何か?
そして、おそらく私の全体の闘いに答える一つの質問:
考えられるすべてのエラーがHTTP 500
を返しているかどうかをテストしていますか。これは、オーバーエンジニアリングと呼ぶものですか、それともかなり良い方法ですか?
基本的に、テストする必要があるのは3つあります。
ディスク容量が不足すると、コンポーネントは正しい例外をスローしますか?
これは、単体テストで依存関係を模擬し、必要なエラーをスローすることで確認できます。
ホスティング層はすべての例外をHTTP 500としてユーザーに返しますか
これは、エラーシナリオをテストする統合テストを行うことで確認できます。おそらく、特定の入力でスローされることがわかっている他のテストの1つ。
問題の特定の例外はHTTP 500エラーを返しますか
これはテストが困難ですが、モックを完全なアプリケーションに挿入することでテストできます。同じモックでさまざまなシナリオをテストできるように、入力に応じて異なる例外を返すようにモックをコーディングします。
実際には、奇妙なことがなければ、3をスキップします。あなたはグローバルなエラー処理をテストしているだけであり、起こり得るすべての例外をカバーすることはできません
エンドツーエンドの統合テストでは、ハッピーパスと、トリガーが簡単ないくつかの障害シナリオに焦点を当てます。
より複雑な、またはトリガーが難しい障害シナリオは、単体テストとコンポーネントテストでカバーする必要があります。
あなたが説明するシナリオでは、
- サーバーがコード500で応答したときの動作を確認するアプリ
- ライブラリXに予期しないエラーが発生した場合、サーバーがコード500で応答することを確認します
- ライブラリーXは、ファイルシステムがいっぱいになったときに、それを検証して適切なエラーを示します。
これらはすべてユニット/コンポーネントレベルのテストであり、依存関係のほとんどがモックまたはスタブされています。