2009-06-25 16 views
9

私はかなり複雑なJava Webサービスを模倣しなければならず、私は正しい解決策を探しています。それを行う1つの方法は、Soap UIを使用することですが、私はサーバーの状態を変更することができる何かが必要です。 1つのリクエストは将来のリクエストに影響します。Java Webサービスを模擬する最善の方法

この特定のケースでは、シリアライズされたオブジェクトをディスクに保存し、元のクライアントWebサービスに非同期応答を生成することによって迅速に実行できます。

これらの2つの要件によって、私はSoapUIを使用できなくなりました。グルーヴィーロジックはかなり複雑になり、おそらく難しいでしょう。

私の質問:。

1)は、他のSOAPUIの利点は、カスタムJavaモック実装上)WSDLの新バージョンへの移行など簡単に(この文脈ではありますか?

2)wsdlからWebサービスを生成するのに最も適切な方法は何でしょうか。それでもいくつかのカスタム機能、 (更新されたwsdlからのwsコードの再生成をさらに容易にするために)別々のファイルで編集可能ないくつかのフックを付けることによって?

+0

モックはテスト目的のためだけでなく、そのままクライアントの部分を残しておく必要があります。通常のhttp通信が必要で、エンドポイントだけが変更されます。だから私はフレームを嘲笑してこのケースではできないと思う。 – aaimnr

+0

あなたが統合テストを話しているなら、私はあなたのプロダクション環境を可能な限り厳密にミラーリングしようとし、UAT/QAデータベースに対して実際のWebサービスを使用します。 Webサービスがあなたのコントロール下にない場合は、テスト中に使用する「テスト」データの作成を見てください。IMHOはウェブサービスの「モック」/スタブを作成すると、あなたの「モック」/スタブがウェブサービスの動作の前提に基づいているため、セキュリティに対する誤った感覚を与えます。これは単体テストでは問題ありませんが、完全な統合テストでは、実物を使って確実に動作するようにする必要があります。 –

+0

実際には統合テストではなく、トレーニング目的で使用することを検討してください。フロントエンドが使用するWebサービスは、ミラーリングするのが難しい(機密データがたくさんある)ので、軽量なモックを作成する方が簡単ですが、状態を維持するのに十分インテリジェントなので、論理的なトレーニングシナリオの可能性があります。 – aaimnr

答えて

2

シンプルモックの場合はsoapUIを使用しますが、リクエストの間に状態を変更する必要がある場合はさらに複雑になりますが、私はPythonで書かれたシンプルなWebサービスエミュレータを使用します。このようなエミュレータは、実際のWebサービスから作成したリプライテンプレートや、soapUIで作成したレスポンスを使用します。このようにして私はすべてのロジックを制御することができます。

私の最後のプロジェクトのエミュレータは、300行以上のPythonコードを持っていますが、これまでよりはるかに単純です.150行のPythonコードでした。

+0

それは涼しくて、すべてが利用可能ですか? – Monachus

+0

soapUIは無料です(有料版もあります)。エミュレータに使用するPythonスクリプトは、指定されたサービスが異なります.HTTPサーバーを使用し、テンプレートとデータベースの値に基づいて応答を埋め込みます。 –

5

EasyMockを参照すると、プログラムによってモックを構築できます。あなたのモックには非常に複雑な振る舞いを指定することができます。

3

クライアントで生成されたスタブを使用していると思われますか?スタッブを模擬API(JMockまたはEasyMock)の1つでモックして、模擬テストをテスト対象クラスに注入する必要があります。

呼び出しを処理するクラスをサーバー側でテストし、ジョブの実行に使用する可能性のあるオブジェクトのモックを注入します。

すべての呼び出しをローカル(インプロセス)の単体テストに保つよう努めてください。テスト対象クラスが依存するオブジェクトからの戻り値を簡単に制御できます。テストスイートが成長すると、ユニットテストがビルドプロセスでボトルネックになるのを防ぐのに役立ちます。

WSDLからJavaクラスを生成することに関して、Apache AxisにはWSDL2Javaと呼ばれるものがあります。これは前述のクライアントスタブを生成します。この種のユーティリティは、Webサービスフレームワークでは一般的ですが、導入されたEJB3 Webサービスがjavax.xml.rpc.ServiceFactoryであるため、現在置き換えられている可能性があります。

ここにはEJB3 Webサービスとクライアントに関するチュートリアルがあります(http://www.theregister.co.uk/2007/01/23/ejb_web_services/)。

関連する問題