0

Web サービス レイヤー (Web サービスは Java で記述されている) のコンシューマーが自動化された統合テストを作成して、コンシューマーが使用する Web サービス レイヤーのバージョンがコンシューマーに対して引き続き機能することを検証できるようにしたい (つまり、Web サービスはコンシューマーとは異なるリリース ライフサイクルで、その API または動作が変更される可能性があります。コンシューマーに通知せずに変更するべきではありませんが、この自動テストのポイントは、変更されていないことを検証することです)。

Web サービスが実際にトランザクションを実行する (データベース テーブルを更新する) 場合、どうすればよいでしょうか。単体テストでそれを知り、終了したらトランザクションをロールバックするためにロジックをWebサービス自体に入れることなく、これを処理する方法の一般的な方法はありますか? (基本的には、Web サービスのテストを処理する機能を組み込みます)。それとも、それを行うための推奨される方法ですか?

コンシューマーは当社の 1 つの開発チームによって作成され、Web サービスは別のチームによって作成されます。テストは統合環境で実行されます (統合環境は、QA 機能テスターが使用するテスト環境の背後にある 1 つの環境であり、本番環境の背後にある 1 つの環境です)。

4

4 に答える 4

1

この種のことへの最良のアプローチは、依存性注入です。

データベース処理コードをWebサービスに挿入される1つまたは複数のサービスに配置し、テスト環境で使用され、実際にはデータベースを更新しない、またはテスト制御下でリセット機能を追加するモックバージョンを作成します。

このようにして、テストは実際のWebサービスを実行できますが、実際のデータベースは実行できません。また、テストをより簡単に再現可能にすることができます。

Javaでの依存性注入は、(とりわけ)SpringまたはGuiceを使用して実行できます。Guiceはもう少し軽量です。

お気づきのように、システムプロパティに基づいて、アプリケーションの起動時にインジェクションの決定を行うことが賢明な場合があります。

一部のテストでデータベースを実際に更新して有効にする必要がある場合、データベース処理のテストバージョンでは実際のデータベースを使用する必要がありますが、テストからアクセスしてデータベースを既知の(場合によっては空の)状態にリセットする方法も提供する必要があります。テストを繰り返すことができるようにします。

于 2012-08-02T13:55:44.727 に答える
0

私の選択は、本番環境と本番前環境で Web サービス レイヤーをホストすることです。顧客は本番前のテストを行うことができますが、トランザクションに対して請求されることはありません。

明らかに、これには実動と前実動を同時に更新する必要があります。

于 2012-08-02T13:33:34.323 に答える
0

Web サービスを変更せずに実行し、データベースで必要なものをすべて更新します。

統合テストでは、各テスト ステップの後に正しいデータベース レコードが書き込まれ、更新されていることを確認する必要があります。
これを実現するために、soapUI テストベッドを使用します。
テスト後のアサーション スクリプトを Groovy と Java で記述できます。これにより、JDBC を使用してデータベースに簡単に接続し、レコードを確認できます。

人々は実際のデータベースを使用することに不安を感じています - 私はこれにこだわるつもりはありません。
データベースの「状態」に関しては、いくつかの方法でこれにアプローチできます。

  • テストを実行する前にデータベースを既知の状態に復元する
  • テストを自分でクリーンアップする
  • より多くのテストが実行されるにつれてデータベースがいっぱいになり、時々それをきれいにします

現時点では最後のアプローチを採用していますが、問題が発生した場合は将来変更される可能性があります。実際には、実際の顧客データベースのようになるため、データベースをレコードで埋めることは気にしません。また、テストの失敗を調査するときにも非常に役立ちます。

于 2012-08-02T15:52:54.443 に答える
0

たとえば、cxf を使用すると、トランスポート層を変更できます。そのため、構成を変更して localTransport を使用するだけです。次に、ネットワークアクティビティなしでクライアントとサーバーのオブジェクトを作成する必要があります。マーシャリングのテスト (非) には最適です。ビジネスロジックがWebサービスを認識しないように、他のすべてを分離する必要があるため、他のクラスとしてテストできます

于 2012-08-02T18:04:32.497 に答える