Webサービスを照会するアプリケーションを構築しています。データベース内のデータは変化し、時間とともに変化します。このタイプのアプリケーションの単体テストを作成するにはどうすればよいですか?
Webサービスは、xmlまたは検索結果なしのhtmlページを送り返します。Webサービスを実際に変更することはできません。私のアプリケーションは基本的にHTTPURLConnectionを使用してWebサービスにクエリを実行し、応答を文字列として取得します。
それがより詳細に役立つことを願っています。
Webサービスを照会するアプリケーションを構築しています。データベース内のデータは変化し、時間とともに変化します。このタイプのアプリケーションの単体テストを作成するにはどうすればよいですか?
Webサービスは、xmlまたは検索結果なしのhtmlページを送り返します。Webサービスを実際に変更することはできません。私のアプリケーションは基本的にHTTPURLConnectionを使用してWebサービスにクエリを実行し、応答を文字列として取得します。
それがより詳細に役立つことを願っています。
モックアウトできるプロキシを使用してWebサービスを抽象化します。モックWebサービスに、通常のデータとコーナーケースを表すさまざまな値を返してもらいます。また、Webサービスからの例外の取得をシミュレートします。コードがこれらの条件下で機能することを確認してください。また、Webサービスが提供する任意の値で機能することを合理的に確信できます。
JavaモックのjMockを見てください。
厳密に言えば、単体テストでは、決定論的な動作をする単体のみをテストできます。
外部Webサーバーに接続するテストは、統合テストです。
解決策は、HTTPURLConnectionをモックすることです。つまり、HTTPURLConnectionクラスから派生し、ハードコードされた値またはパラメーター化可能な値を返すクラスを単体テストで作成します。編集:これは、モックフレームワークなしで手動で実行できることに注意してください。
Webサーバーにクエリを実行するクラスは、HTTPURLConnectionをインスタンス化するのではなく、パラメーターを介して受信します。単体テストでは、HTTPURLConnectionMockを作成し、それを実際のHTTPURLConnectionを使用しているのと同じように使用するWebサーバーに問い合わせるクラスに渡します。本番コードでは、実際のHTTPURLConnectionを作成し、それをクラスに渡します。
HTTPURLConnectionMockがIOExceptionをスローできるようにして、エラー状態をテストすることもできます。結果を返さず、次のリクエストで例外を返すように指示するメソッドがあります。
レベルが高すぎるようです。Webサービスインターフェイスをモックし、データベースにアクセスするデータレイヤーに他の単体テストを作成することを検討してください。ここでもう少し詳しく説明すると、たとえばテストしようとしている状況など、この質問に答えやすくなる場合があります。
私は通常、単体テストの結果が変わらないか、少なくともあなたが期待している範囲内にあることを期待します
あなたの質問は少し自由ですが、上記の情報を使用するだけでテスト可能なオプションがいくつかあります。
もう少し情報があれば、役立つ提案が山ほど得られると確信しています。
私が遭遇した問題は、複雑な(「くだらない」を意味する)データモデルであり、問題がコードエラーまたはデータエラーによるものであるかどうかを確認することはできません。
この症状は、アプリケーションが正常に動作し、モックデータまたは新しいデータセットですべてのテストなどに合格したが、実際のデータでアプリケーションを実行するとひどく壊れた場合です。