9

JerseyTest を使用して、RESTful Web サービス用の JUnit ベースの統合テストを作成しています。JAX-RS リソース クラスは Spring を使用しており、現在、次のコード例のようなテスト ケースとすべてを結び付けています。

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 とテスト ケースの間で共有されるアプリケーション コンテキストを作成する方法を知っている人はいますか?

ありがとう!

4

2 に答える 2

10

次のように 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を呼び出すこともできます。

于 2014-07-03T11:24:35.067 に答える
5

この問題を解決する方法をいくつか見つけました。

まず、geek @ riffpieブログに、この問題の優れた説明と、JerseyTestそれを解決するため のエレガントな拡張機能があります。Springと結合されたユニットテストRESTfulジャージーサービス

残念ながら、私はSpringやJerseyの新しいバージョンを使用していて(どちらかを忘れて)、それを完全に機能させることができませんでした。

私の場合、Jersey Test Frameworkを削除し、Jersey Clientと一緒に組み込みJettyを使用することで、問題を回避することになりました。私はすでにアプリケーションで組み込みJettyを使用していたので、これは実際には私の状況ではより理にかなっています。 yves amsellemには、JerseyClientと組み込みJettyを使用した単体テストの良い例があります。Springの統合には、EmbeddedJettyとSpringを使用したTrimboのJerseyTestsのバリエーションを使用しました。

于 2012-05-24T13:31:30.077 に答える