我正在開發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?
真的很感謝任何幫助 - 向控制器類中的方法添加方面是否錯誤?我應該在測試時以某種方式禁用方面嗎? (儘管理想情況下我希望在集成測試中看到日誌記錄工作正常)。
非常感謝
理查德
謝謝 - 是的上下文配置指向所有必需的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
只需要補充說明這些文件是在web.xml中的contextConfigLocation servlet上下文參數 – otter606 2012-08-02 20:33:49
哦,1個問題,你使用AspectJ編譯時間/加載時間編織還是使用帶有@AspectJ樣式註釋的Spring AOP?你是對的,控制器的代理可能是什麼導致了這個問題 - 你從一些接口/抽象類派生你的控制器? – 2012-08-02 20:37:18