2

WebApplicationContextUtils.getRequiredWebApplicationContext(context)メソッドでSpringに依存するサーブレットコードを単体テストしたいと思いますinit()

コードの一部は次のとおりです。

@Override
public void init() throws ServletException {
super.init();
WebApplicationContext applicationContext =
    WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
this.injectedServiceBean = (SomeService) applicationContext.getBean("someBean");
}

このテキストに適切なapplicationContext.xml(テストバージョン)を挿入するための最良の方法は何でしょうか?

Springのことは知っていますが、getRequiredWebApplicationContext(...)が返すことができるように、そのアノテーションによってロードされたコンテキストをサーブレットコンテキストに@ContextConfiguration挿入するための最良のアプローチについてはわかりません。${testClass}Test-context.xml

4

1 に答える 1

9

次の方法でアプリケーション コンテキストを挿入できます。

getServletContext().setAttribute(
  WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
  testApplicationContext
);

これは、キー (定数)でWebApplicationContextUtils格納されているオブジェクトをフェッチするために機能します。ServletContextorg.springframework.web.context.WebApplicationContext.ROOTWebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE

これは、アプリケーション コンテキストから Bean を直接フェッチすることには問題があることを示しているだけです。このアプローチは DI 規則に従わないからです。可能であれば、このサーブレットをリファクタリングして、Spring との統合を改善してみてください (例を参照してください)。HttpRequestHandlerServlet

于 2011-12-11T15:02:17.647 に答える