Spring提供了下列一些特定的JUnit框架擴展:
AbstractDependencyInjectionSpringContextTests—這是一個針對所有測試的超類,其具體使用依賴于Spring上下文。
AbstractSpringContextTests—這是一個針對所有的JUnit測試情形的超類。它使用一個Spring上下文。并且,一般在測試中不是直接使用它,而是使用AbstractDependencyInjectionSpringContextTests或者AbstractTransactionalSpringContextTests這樣的派生類。
AbstractTransactionalSpringContextTests—這是一個針對所有測試的超類,我們一般把它應用在事務相關的測試中。注意,一旦完成每個測試它就會正常地回滾事務;而且你需要重載onSetUpInTransaction和onTearDownInTransaction方法以便手工開始并提交事務。
AbstractTransactionalDataSourceSpringContextTests—這是AbstractTransactionalSpringContextTests的一個子類,它使用了Spring的基于JDBC的jdbcTemplate工具類。
所有上面這些擴展將極大程度地簡化在測試時對于相關操作的依賴性注入和事務管理。
三、普通Web測試情形
在此,我們將回顧測試Web組件的普通情形以及怎樣在其中使用Spring的mock對象和JUnit框架擴展。
(一)確定一個正確的視圖
基于輸入參數生成正確的視圖可能是在操作一個Web應用程序時最普通的功能。在Spring MVC的上下文中,這意味著Spring MVC將基于參數的狀態返回某種ModelAndView對象。你可以通過簡單地利用如下的Mock對象以一個常規JUnit測試方式來測試這項功能:
public void final testGettingToDetails throws Exception{
MyController myController = new MyController(); myController.setDetailsView( detailsViewName );
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
request.setMethod("POST");
request.addParameter("viewDetails", "true");
ModelAndView modelAndView = myController.handleRequest(request, response);
assertEquals("Incorrect view name", detailsViewName,modelAndView.getViewName());
}
既然控制器很可能會利用一些服務對象來決定結果視圖,那么你還可以定制控制器中所用的這些mock服務對象。關于利用定制對象的更多資料,請參考mockobjects.com。
#p#(二)會話相關的操作
對于任何J2EE Web應用程序來說,另一個必須實現的操作是HttpSession綁定處理。例如,Spring MVC可能需要決定是否一個對象處于會話中及其具體狀態以便產生正確的結果。你可以利用MockHttpSession對象和JUnit框架測試這種情形。請參考如下的代碼片斷:
文章來源于領測軟件測試網 http://www.kjueaiud.com/