2011-01-31 19 views
3

私はSpringのWebServiceテンプレートクラスの単体テストを書くための最良の方法を見つけようとしています。私がしようとしているのは、クライアントが生成している各リクエスト/レスポンスタイプに対してこれらのクラスを正しく接続していることを確認することです。私はまた、例外が返された場合、例外が正しく処理されるようにしたい。ユニットテストWebServiceTemplate(SpringWS)

私がしようとしていることは、実際の送受信を行う方法を見つけ出すことだと思います。

提案がありますか?

+0

実際にWebServiceテンプレートを使用して「ライブ」Webサービスにヒットするユニットテストを作成しますか? –

+0

私は "生きている" Web Serivcesをヒットしようとしていないので、SoapUIのようなツールは私を助けません。基本的には、私のクライアントには12種類のリクエスト/レスポンスタイプがあります。各応答/要求のペアについて、私はインスタンス化したWebServiceTemplateを持っています。私はこれらを正しく配線していることを確認したい。また、マーシャルが作成するXMLのスキーマを検証したいと思います。 –

答えて

3

私はタッキーになり、自分自身の質問に答えます。クライアント - を行うためのコアクラスを

:私は春のWS 2.0は、私が(http://blog.springsource.com/2011/01/11/spring-web-services-2-0-released/から)行うことを期待していたまさに行い、新たなクライアントのテストフレームワークを持っていることがわかっさらに少し研究した後

サイド統合テストは MockWebServiceServerです。 アイデアは、Webサービステンプレート がこの模擬サーバーに接続し、 リクエストメッセージを送信し、模擬サーバー が登録済みの の期待と照合するというリクエストメッセージです。期待値が である場合、模擬サーバーは をテンプレートに送り返す 応答メッセージを準備します。MockWebServiceServerの作成

テスト クライアント側コードの典型的なシナリオが構成されています。

  • 要求メッセージに関する期待値を設定しています。
  • 適切な応答メッセージを作成する
  • 通常WebServiceTemplateを使用して、直接 クライアントコードを使用します。
  • にすべての期待値が と一致するようにMockWebServiceServer.verify()を呼び出します。
  • は今、残念ながら私のプロジェクトは、まだ春-WS 1.5.9を使用しています。私はクライアントを2.0にアップグレードし、何かが壊れているかどうかを調べるつもりです。それがうまくいくならば、すぐにサーバー側を切り替えてみるかもしれません。

    0

    soapUIは、公開されたWSをテストするのに適しています。アドホックテストの要求をクラフトに伝えたり、事前定義されたテストをさまざまな方法で自動化することができます。

    5

    厳密に言えば、単体テストではWebServiceTemplateを使用しないでください。あなたのコードはWebServiceOperationsインターフェイスと話すべきです。モックオブジェクト。これはネットワーク呼び出しを行わず、あなたが書くJavaだけをテストします。

    あなたが記述していることは、実際のWebサービスへの呼び出しを含め、配線が適切に行われているかどうかをテストする統合テストと呼ばれる方がいいでしょう。

    この場合、統合テストは単体テストを補完します。私の助言 - 両方を書く。

    1

    WebServiceTemplateを単独で使用するクラスの単一ユニット以上のテストを行っているので、あなたが記述したことは、実際には「ユニットテスト」ではありません。このクラスの優れた単体テストには、WebServiceTemplateクラスの模擬が含まれているため、WSTがさまざまなタイプの応答、例外などを返すときにクラスの動作をテストできるようになります。

    クラスの動作を確認するテスト用有線共同作業者(およびSpringのコンテキスト)とのランタイムは、SpringのTestContext Frameworkを調べるべきです。これにより、テストクラスに@ContextConfiguration({"path/to/spring/xml"})などのアノテーションを付けて、テストを実行する前にSpringがApplicationContextをインスタンス化し、@Autowiredプロパティをテストクラスに注入することができます。

    最後の注意:実際のWebサービスと比較してWebサービスを使用しているクラスをテストすることは、テストに外部依存関係を導入するため、通常は悪い習慣です。それはどんなサーバーですか?それはどのバージョンですか?通常の単体テスト・スイートの一部としてこれらのテストを実行したくない場合があります。

    +0

    これは、統合テストです。 –