2012-08-02 72 views
0

我正在開發Spring MVC Web應用程序(目前是Java 6和Spring 3.0.6)。 我開始使用擴展AbstractTransactionalJUnit4SpringContextTests的Junit4編寫一些Spring集成測試。我通過我們的Maven構建或者在EclipseIDE中調用這些(3.7)。這些測試調用Controller方法(即,在用@Controller註釋的類中使用@RequestHandler註釋的方法)。如何在使用方面時運行Spring集成測試?

全部進行得很順利,直到我增加了一個基於方面,日誌記錄到控制器:

// public controller methods 
@Pointcut("execution(public * com.axiope.webapp.controller.*.*(..))") 
private void publicControllerMethod() { 
} 
@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)") 
private void requestHandler(){} 

@Pointcut("publicControllerMethod() && requestHandler() ") 
private void controllerHandler(){} 



// logs contoller exceptions 
@AfterThrowing(
     pointcut="controllerHandler()", 
     throwing="ex") 
     public void logControllerExceptions(Throwable ex) { 
    logger = LogFactory.getLog(ex.getClass()); 
    logger.error("Controller exception !" + ex.getMessage()); 
    } 

現在,當我通過Maven的運行測試中,我得到這樣一個錯誤:

No unique bean of type [com.axiope.webapp.controller.StructuredDocumentController] 
is defined: expected single bean but found 0: 

在測試中,我正在從setUp方法的applicationContext中加載控制器:

structuredDocumentController = applicationContext.getBean(
    StructuredDocumentController.class); 

This e如果我評論這方面的話,那麼rror就不會發生。我懷疑它與Spring代理控制器有關,然後控制器類無法通過它的類名來識別。我試過在applicationContext.xml中聲明控制器爲bean,但這沒有幫助。在Eclipse中運行測試時也會發生此問題,所以這對我的Maven配置不是問題。

我的問題是:我如何獲得在測試中檢測到的控制器bean?

真的很感謝任何幫助 - 向控制器類中的方法添加方面是否錯誤?我應該在測試時以某種方式禁用方面嗎? (儘管理想情況下我希望在集成測試中看到日誌記錄工作正常)。

非常感謝

理查德

回答

0

方面不是可能的問題,您應該能夠在控制器中也使用它們沒有任何問題。

我的猜測是,你沒有加載正確的上下文,你的測試 - 你怎麼指定應用程序上下文用於這個測試 - 有@ContextConfiguration你的測試類的位置,是根上下文的位置(通過ContextLoaderListener指定)或Web應用程序上下文(通過DispatcherServlet指定)。

+0

謝謝 - 是的上下文配置指向所有必需的Spring配置文件。例如, @ContextConfiguration( 位置= { 「類路徑:/applicationContext-resources.xml」, 「類路徑:/applicationContext-dao.xml」, 「類路徑:/applicationContext-service.xml」, 「類路徑:/ applicationContext-test.xml「, 」/WEB-INF/applicationContext*.xml「, 」/WEB-INF/dispatcher-servlet.xml「}) – otter606 2012-08-02 20:27:27

+0

只需要補充說明這些文件是在web.xml中的contextConfigLocation servlet上下文參數 – otter606 2012-08-02 20:33:49

+0

哦,1個問題,你使用AspectJ編譯時間/加載時間編織還是使用帶有@AspectJ樣式註釋的Spring AOP?你是對的,控制器的代理可能是什麼導致了這個問題 - 你從一些接口/抽象類派生你的控制器? – 2012-08-02 20:37:18

相關問題