2009-05-26 28 views
7

私はJAX-RS WebサービスをRestletライブラリで実装しましたが、今はテストしたいと思います。それを行うために、私はテストでmockedサービスで事前初期化することでこのサービスをホストしたいと考えています。RESTLET Webサービスのテストケースを作成する最良の方法は何ですか?

このようなサービスをホストし、テストコールを実行する最も良い方法は何ですか?

@Path("/srv") 
public class MyService 
{ 
    @GET 
    public void action(@Context UriInfo uri) 
    { ... } 
} 

@Test 
public void myTest() 
{ 
    MyService service = new MyService(); 
    service.setSomething(...); 

    // How do I host it? 

    // How do I call it? 
} 

答えて

0

のRestletを使用すると、さまざまなサーバー「コネクター」にあなたのWebサービスを実行することができますし、サーバーから別のサーバーへ切り替えることは非常に簡単です。私たちは通常、Sun Glassfish Java EEアプリケーションサーバークラスタ上でWebサービスを実行しますが、テストのために、Simple HTTP Serverとリンクするコネクタを使用して、Webサービスをスタンドアロンアプリケーションとして実行します。 AsyncWeb、Jetty、Grizzly、および内部HTTPサーバー用のサーバーコネクタもあります。

クライアント側では、Restletクライアントライブラリを考慮する必要があります。これはかなり簡潔で、Restletサーバーとよくマッチするように設計されています。 Apache HTTP Clientコネクタを使用します。

テストのために、Fetcherクラスを作成しました。これは、RestletクライアントAPIを使用して実装されます。

DTO person = fetch("/employee/1234"); 
DTO department = fetch("/department/" + person.getDepartment()); 

は(フェッチ)へのRestletクライアントAPIを使用して、ベースのWebサービスのURI(「http://localhost:8182」と言う)に指定されたリソース名を鋲:それを使用するには、かなりのフェッチ()メソッドを呼び出しますXML表現をフェッチし、フェッチされたXMLをデシリアライズしてデータ転送オブジェクト(POJO)にします。

これは実際にユニットテストを非常に簡単にすることがわかります。単体テストの前に、SimpleやJettyのようなスタンドアロンのサーバーでWebサービスを起動します。ユニットテストの間に、DTO、DOMツリー、json.orgオブジェクト、またはFetcherを使用するものをフェッチし、返されたものにテストアサーションを適用します。より詳細なレベルでテストする必要がある場合は、Restletクライアントコードを直接使用することができます。

+1

私の質問の全体的なポイントは、プロセス内のWebサービス/コンポーネントをどのように初期化するかを理解することでした。私は望んでいない/リモートサーバー上で実行することはできません。 Webサービスとして公開される前に、模擬されたインスタンスでサービスを初期化する必要があります。クラス/コンポーネントのインスタンスをサービスとして公開する方法はありますか? – IgorM

+0

答えは? IgorM - あなたはそれを仕上げましたか? – Vatsala

関連する問題