10

Webサービスを照会するアプリケーションを構築しています。データベース内のデータは変化し、時間とともに変化します。このタイプのアプリケーションの単体テストを作成するにはどうすればよいですか?

Webサービスは、xmlまたは検索結果なしのhtmlページを送り返します。Webサービスを実際に変更することはできません。私のアプリケーションは基本的にHTTPURLConnectionを使用してWebサービスにクエリを実行し、応答を文字列として取得します。

それがより詳細に役立つことを願っています。

4

5 に答える 5

26

モックアウトできるプロキシを使用してWebサービスを抽象化します。モックWebサービスに、通常のデータとコーナーケースを表すさまざまな値を返してもらいます。また、Webサービスからの例外の取得をシミュレートします。コードがこれらの条件下で機能することを確認してください。また、Webサービスが提供する任意の値で機能することを合理的に確信できます。

JavaモックのjMockを見てください。

于 2009-01-06T02:39:57.060 に答える
6

厳密に言えば、単体テストでは、決定論的な動作をする単体のみをテストできます。

外部Webサーバーに接続するテストは、統合テストです。

解決策は、HTTPURLConnectionをモックすることです。つまり、HTTPURLConnectionクラスから派生し、ハードコードされた値またはパラメーター化可能な値を返すクラスを単体テストで作成します。編集:これは、モックフレームワークなしで手動で実行できることに注意してください。

Webサーバーにクエリを実行するクラスは、HTTPURLConnectionをインスタンス化するのではなく、パラメーターを介して受信します。単体テストでは、HTTPURLConnectionMockを作成し、それを実際のHTTPURLConnectionを使用しているのと同じように使用するWebサーバーに問い合わせるクラスに渡します。本番コードでは、実際のHTTPURLConnectionを作成し、それをクラスに渡します。

HTTPURLConnectionMockがIOExceptionをスローできるようにして、エラー状態をテストすることもできます。結果を返さず、次のリクエストで例外を返すように指示するメソッドがあります。

于 2009-01-06T07:04:01.690 に答える
3

レベルが高すぎるようです。Webサービスインターフェイスをモックし、データベースにアクセスするデータレイヤーに他の単体テストを作成することを検討してください。ここでもう少し詳しく説明すると、たとえばテストしようとしている状況など、この質問に答えやすくなる場合があります。

私は通常、単体テストの結果が変わらないか、少なくともあなたが期待している範囲内にあることを期待します

于 2009-01-06T02:40:25.967 に答える
3

あなたの質問は少し自由ですが、上記の情報を使用するだけでテスト可能なオプションがいくつかあります。

  1. クエリがまったく機能するかどうかをテストできます。空でない/null でない結果セットを返す必要があることをアサートします。
  2. クエリの結果が有効な結果セットであるかどうかをテストできます。結果が検証コードを通過する必要があることを表明します (したがって、この時点で、データが非 null であり、無意味ではなく、有用である可能性があることがわかります)。
  3. データスキーマ/データ記述について何か知っている場合は、フィールドが互いに関連していると断言できます。たとえば、ヘリコプターで結果を取得した場合、それはマイナス 100 メートルの高度に関連付けられるべきではありません....
  4. データの確率分布について何か知っていれば、一連のデータを収集し、結果の分布が予想されるものの標準偏差内にあると断言できるはずです。

もう少し情報があれば、役立つ提案が山ほど得られると確信しています。

于 2009-01-06T02:43:50.250 に答える
1

私が遭遇した問題は、複雑な(「くだらない」を意味する)データモデルであり、問​​題がコードエラーまたはデータエラーによるものであるかどうかを確認することはできません。

この症状は、アプリケーションが正常に動作し、モックデータまたは新しいデータセットですべてのテストなどに合格したが、実際のデータでアプリケーションを実行するとひどく壊れた場合です。

于 2009-01-06T17:25:16.010 に答える