web-dev-qa-db-ja.com

テストサーバーの障害を統合する方法(http 500)

タイトルのように:500 HTTP応答を返す統合テストサーバーの障害をどのようにして行うのですか?

例:

  1. POST上のファイルを受け入れ、サーバーのファイルシステムに保存する/saveエンドポイントを持つサーバーがあります
  2. ライブラリー/依存関係Xがあり、ファイル保存機能をアプリケーションの他の端のどこかで処理します
  3. Xはいくつかの理由で失敗する可能性がありますが、この例では、ディスクにスペースがないためにクラッシュするとします。
  4. プロセスをクラッシュさせる代わりに、HTTP 500をスローしたい

この状況で何をしますか?

  1. Xをモックして、実際にテストでエラーをスローしますか?
  2. これらの種類のテストを省略して、グローバルにどこかでエラーを処理しますか?
  3. 統合テストでハッピーパスをテストし、エラーケースを無視してユニットテストでテストしますか?
  4. 他に何か?

そして、おそらく私の全体の闘いに答える一つの質問:

考えられるすべてのエラーがHTTP 500を返しているかどうかをテストしていますか。これは、オーバーエンジニアリングと呼ぶものですか、それともかなり良い方法ですか?

2
sarneeh

基本的に、テストする必要があるのは3つあります。

  1. ディスク容量が不足すると、コンポーネントは正しい例外をスローしますか?

    これは、単体テストで依存関係を模擬し、必要なエラーをスローすることで確認できます。

  2. ホスティング層はすべての例外をHTTP 500としてユーザーに返しますか

    これは、エラーシナリオをテストする統合テストを行うことで確認できます。おそらく、特定の入力でスローされることがわかっている他のテストの1つ。

  3. 問題の特定の例外はHTTP 500エラーを返しますか

    これはテストが困難ですが、モックを完全なアプリケーションに挿入することでテストできます。同じモックでさまざまなシナリオをテストできるように、入力に応じて異なる例外を返すようにモックをコーディングします。

実際には、奇妙なことがなければ、3をスキップします。あなたはグローバルなエラー処理をテストしているだけであり、起こり得るすべての例外をカバーすることはできません

1
Ewan

エンドツーエンドの統合テストでは、ハッピーパスと、トリガーが簡単ないくつかの障害シナリオに焦点を当てます。

より複雑な、またはトリガーが難しい障害シナリオは、単体テストとコンポーネントテストでカバーする必要があります。

あなたが説明するシナリオでは、

  • サーバーがコード500で応答したときの動作を確認するアプリ
  • ライブラリXに予期しないエラーが発生した場合、サーバーがコード500で応答することを確認します
  • ライブラリーXは、ファイルシステムがいっぱいになったときに、それを検証して適切なエラーを示します。

これらはすべてユニット/コンポーネントレベルのテストであり、依存関係のほとんどがモックまたはスタブされています。