2012-05-15 9 views
8

JerseyTestを使用したRESTful Webサービス用のJUnitベースの統合テストをいくつか書いています。 JAX-RSのリソースクラスは、春使用して、私は現在、以下のようなテストケースと一緒にevernthing配線しています:SpringとJerseyテストフレームワークによるユニットテスト

public class HelloResourceTest extends JerseyTest 
{ 
    @Override 
    protected AppDescriptor configure() 
    { 
     return new WebAppDescriptor.Builder("com.helloworld") 
     .contextParam("contextConfigLocation", "classpath:helloContext.xml") 
     .servletClass(SpringServlet.class) 
     .contextListenerClass(ContextLoaderListener.class) 
     .requestListenerClass(RequestContextListener.class) 
     .build();   
    } 

    @Test 
    public void test() 
    { 
     // test goes here 
    } 
} 

これは、サーブレットの配線のために働く、しかし、私が共有できるようにしたいと思います私のテストでは、SpringJUnit4ClassRunnerを呼び出すような模擬オブジェクト、DAOなどにアクセスできるように、私のテストケースでは同じコンテキストを使用しています。残念ながら、SpringJUnit4ClassRunnerは別個の並列アプリケーション・コンテキストを作成します。

SpringServletとテストケースの間で共有されるアプリケーションコンテキストを作成するにはどうすれば知っていますか?

ありがとうございます!

答えて

5

この問題を解決するには、いくつかの方法があります。

まずアップ、オーバーオタクの@ riffpieブログでそれを解決するためにJerseyTestのエレガントな拡張子と一緒にこの問題の優れた記述があります: Unit-testing RESTful Jersey services glued together with Spring

残念ながら、私は新しいバージョンを使用しています春とジャージのどちらかを忘れてしまって、それをうまく動作させることができませんでした。

私の場合、Jersey Test Frameworkを削除し、Jersey Clientとともに埋め込みJettyを使用することで、この問題を回避できました。私のアプリケーションですでに埋め込みJettyを使用していたので、実際には私の状況ではこれは実際にはより意味をなさないものでした。 yves amsellemにはunit testing with the Jersey Client and embedded Jettyという素晴らしい例があります。 Spring統合のために、私はそうのようなTrimboのJersey Tests with Embedded Jetty and Spring

+0

[その他のサンプルコード](https://github.com/yamsellem/jersey-basics/blob/master/src/test/java/com/xebia/resource/ProductResourceJacksonTest.java)では、Grizzlyまたは展開のための桟橋。 Grizzlyは少し高速ですが、web.xmlは使用できません(コードで設定する必要があります)。 –

9

上書きJerseyTest.configureのバリエーションを使用:

@Override 
protected Application configure() { 
    ResourceConfig rc = new JerseyConfig(); 

    rc.register(SpringLifecycleListener.class); 
    rc.register(RequestContextFilter.class); 

    rc.property("contextConfigLocation", "classpath:helloContext.xml"); 
    return rc; 
} 

SpringServletが必要ではなかった私にとっては、しかし、あなたは、あなたが呼び出すことができることが必要な場合は、 rc.registerもそれを登録してください。

+1

あなたの解決策はJersey 2.x向けです。 – NSPKUWCExi2pr8wVoGNk

+0

@ben:複数のアプリケーションコンテキストをcontextConfigLocationに渡す手助けをしてください。コンマ区切りまたは文字列配列はここでは許可されません。 – developer

+0

1つの方法は、テストスプリングのコンテキストを作成し、アプリケーションコンテキストをインポートすることです。ジャージー設定のテストファイルを使用してください – Chandru

関連する問題