CRM系統(tǒng):Spring的軟件測試方法在超市CRM中的應(yīng)用
2 Sp ring對軟件測試的支持
Sp ring是一個采用控制反轉(zhuǎn)( IoC)作為核心技術(shù)的精致容器,同時靈活采用了面向切面編程(AOP)的
思想,它不僅能夠單獨使用,也可以對其他的框架進(jìn)行有機整合,同時對軟件測試有較強支撐[ 2 ] .
211 Mock在單元測試中的應(yīng)用
Sp ring中的Mock (模擬)對象可以解決缺乏具體實現(xiàn)環(huán)境、沒有相應(yīng)配置依賴時的單元測試問題.
Sp ring中常用的與Web 相關(guān)的Mock 類有: MockHttpServletRequest用于模擬客戶端的Request請求;
MockHttpServletResponse用于模擬服務(wù)端的Response響應(yīng);MockHttpSession用于模擬Session對象.
此外,也可以采用EasyMock對象. EasyMock對象不像Mock對象那樣需要手工編寫代碼, EasyMock
更方便、更適合進(jìn)行TDD開發(fā),可以利用代理模式在相應(yīng)類的測試方法中生成EasyMock對象.
212 Sp ring對集成測試的支持
Sp ring采用依賴注入(D I)容器對集成測試進(jìn)行支持. 集成測試環(huán)境與開發(fā)環(huán)境相近,集成測試是將多
個軟件功能模塊組裝進(jìn)行測試,需要考慮DBMS、連接池、多線程、表現(xiàn)層、業(yè)務(wù)層、持久層等的協(xié)作運行效
果. 常用于集成測試的類有: 1) AbstractSp ringContextTests是后面3個類的超類,一般不獨立使用; 2) Ab2
stractDependencyInjectionSp ringContextTests提供依賴注入功能的集成測試; 3 ) AbstractTransactionalSp ring2
ContextTests支持事務(wù)的測試; 4) AbstractTransactionalDataSourceSp ringContextTests不僅支持事務(wù),而且可
以通過jdbcTemp late屬性直接訪問數(shù)據(jù)表,主要用于持久層測試.
采用D I容器, Sp ring對事務(wù)進(jìn)行測試過程中,對數(shù)據(jù)表記錄進(jìn)行的增、刪、改等更新操作,在測試結(jié)束
后,均回卷到測試前狀態(tài),測試對數(shù)據(jù)表中的數(shù)據(jù)沒有任何破壞[ 6 ] .
213 注釋在集成測試中的應(yīng)用
Sp ring對集成測試提供了@Timed、@Repeat、@DirtiesContext、@ExpectedExcep tion、@NotTransaction2
al、@Transactional等注釋. 利用注釋,可以大大方便和簡化集成測試. Sp ring對注釋將會繼續(xù)增強.
3 Sp ring框架下軟件測試方法在超市CRM中的應(yīng)用
311 運用模擬對象進(jìn)行單元測試
在超市CRM系統(tǒng)中,有大量的展現(xiàn)頁面和控制器,并且相當(dāng)多的頁面都會與數(shù)據(jù)存儲有關(guān),這些功能
的開發(fā)往往是由不同的人員分別完成的,因此,在對一些視圖層或控制器測試時,往往需要相應(yīng)的持久化
環(huán)境. 對于這樣的單元測試問題,需要采用Sp ring的模擬對象.
31111 采用Mock模擬對象
Mock以手工方式建立模擬對象. 建立方法是將業(yè)務(wù)接口中需要進(jìn)行測試的方法進(jìn)行覆蓋,然后進(jìn)行
測試. 這種方式在模擬對象較多的情況下,將會變得十分煩瑣,因此,常用EasyMock來代替.
31112 采用EasyMock進(jìn)行測試
在超市CRM 系統(tǒng)的單元測試中, 主要采用EasyMock 對象進(jìn)行測試,首先產(chǎn)生EasyMock 對象:
MockControl c =MockControl. createStrictControl ( interface. class) ;參數(shù)interface代表模擬接口. 然后創(chuàng)建模
擬對象: interface Imp lm I = ( interface) c. getMock ( ). 模擬對象創(chuàng)建之后,采用c. rePlay ( )進(jìn)行測試. 采用
EasyMock對象對超市CRM系統(tǒng)進(jìn)行測試比采用Mock對象明顯提高單元測試的效率
31113 控制器的測試
采用SSH的超市CRM系統(tǒng),控制器的應(yīng)用非常普遍,對控制器的測試至關(guān)重要. 雖然有數(shù)量眾多的
控制器,但對控制器的測試方法幾乎相同. 測試主要采用MockHttpServletRequest和MockHttpServletRe2
sponse進(jìn)行. 例如超市CRM系統(tǒng)中某個控制器Examp leController類如下:
public class Examp leController extends AbstractController{
p rotectedModelAndView handleRequestInternal (HttpServletRequest req, HttpServletResponse res) throws Excep tion {
⋯
return newModelAndView ( ⋯) ;
} }
在超市CRM系統(tǒng)的測試中,可以通過MockHttpServletRequest對象方法模擬一個Get請求,并且對該
請求添加所需參數(shù). 測試方法如下:
MockHttpServletRequestmyreq = newMockHttpServletRequest (“GET”, “/WEB - INF / jsp / examp le. jsp”) ;
Request. addParamter( ⋯) ;
MockHttpServletResponse myres = newMockHttpServletResponse ( ) ;
ModelAndView result = c. handleRequestInternal (myreq,myres) ;
AssertEquals ( ⋯, result. ⋯) ;
312 超市CRM系統(tǒng)的集成測試方法應(yīng)用
31211 業(yè)務(wù)層組件測試
在超市CRM系統(tǒng)中,業(yè)務(wù)層擔(dān)負(fù)著業(yè)務(wù)邏輯的處理,實現(xiàn)很復(fù)雜,需要與持久層進(jìn)行交互,會頻繁涉
及到事務(wù)處理,測試主要采用的類是AbstractDependencyInjectionSp ringContextTests和AbstractTransactional2
Sp ringContextTests. 前者主要采用依賴注入技術(shù),無事務(wù)管理功能. 如果在業(yè)務(wù)層中涉及數(shù)據(jù)庫操作,則測
試對數(shù)據(jù)表的修改前者會影響數(shù)據(jù)表,而后者由于Sp ring事務(wù)屬性DefaultTransactionDefinition的作用,不
會影響數(shù)據(jù)表. 業(yè)務(wù)層的測試幾乎都會與數(shù)據(jù)表打交道,因此在測試中主要采用后者. 業(yè)務(wù)層的具體測試
方法與持久層的測試方法相似.
31212 持久層組件測試
在超市CRM系統(tǒng)中,持久層主要采用Hibernate實現(xiàn),但有些需要靈活操縱SQL的功能模塊則采用
iBATIS,有些涉及數(shù)據(jù)量不大的地方還采用了JDBC. 持久層組件的測試主要采用AbstractDependencyInjec2
tionSp ringContextTests、AbstractTransactionalSp ringContextTests、AbstractTransactionalDataSourceSp ringContext2
Tests. 這3個測試類都有1個app licationContext變量,該變量緩存Sp ring D I容器的元數(shù)據(jù),當(dāng)元數(shù)據(jù)被修
改后,可以通過調(diào)用setDirty( )方法,在下一測試方法運行前重新初始化D I容器.
在超市CRM系統(tǒng)的持久層測試中,需要配置文件app licationContext2jdbc. xml,配置內(nèi)容主要是Driver
ManagerDataSource數(shù)據(jù)源、DataSourceTransactionManager事務(wù)管理器以及攔截器中的TransactionProxyFac2
toryBean. 配置文件在超市CRM測試系統(tǒng)中的位置由該3個測試類中的方法getConfigLocations( )設(shè)定.
對于AbstractDependencyInjectionSp ringContextTests,可以通過autowiring的AUTOW IRE- BY- TYPE方
式進(jìn)行屬性的setter注入. 若setPopulateProtectedVariables ( )方法的參數(shù)為true,且需要注入的屬性的訪問
控制是p rotected型,則autowiring失效,這樣對控制注入更加靈活. 對于一些不涉及事務(wù)處理的方法,運用
該類的屬性依賴注入特性,可以方便測試[ 8 ] .
在超市CRM系統(tǒng)中,幾乎所有重要的數(shù)據(jù)表訪問都是基于事務(wù)的,事務(wù)管理測試至關(guān)重要. 對于事務(wù)
強力推薦:
天柏客戶關(guān)系管理系統(tǒng)
天柏客戶關(guān)系管理系統(tǒng)(CRM)是一款集專業(yè)性、實用性、易用性為一體的純B/S架構(gòu)的CRM系統(tǒng),它基于以客戶為中心的協(xié)同管理思想和營銷理念,圍繞客戶生命周期的整個過程,針對不同價值的客戶實施以客戶滿意為目標(biāo)的營銷策略,通過企業(yè)級協(xié)同,有效的“發(fā)現(xiàn)、保持和留住客戶”,從而達(dá)到留住客戶、提高銷售,實現(xiàn)企業(yè)利潤最大化的目的。通過對客戶進(jìn)行7P的深入分析,即客戶概況分析(Profiling)、客戶忠誠度分析(Persistency)、客戶利潤分析(Profitability)、客戶性能分析(Performance)、客戶未來分析(Prospecting)、客戶產(chǎn)品分析(Product)、客戶促銷分析(Promotion)以及改善與管理企業(yè)銷售、營銷、客戶服務(wù)和支持等與客戶關(guān)系有關(guān)的業(yè)務(wù)流程并提高各個環(huán)節(jié)的自動化程度,從而幫助企業(yè)達(dá)到縮短銷售周期、降低銷售成本、擴大銷售量、增加收入與盈利、搶占更多市場份額、尋求新的市場機會和銷售渠道,最終從根本上提升企業(yè)的核心競爭力,使得企業(yè)在當(dāng)前激烈的競爭環(huán)境中立于不敗之地。
關(guān)鍵詞:CRM,CRM系統(tǒng),CRM軟件,客戶關(guān)系管理,客戶管理軟件,客戶管理系統(tǒng),客戶關(guān)系管理軟件,客戶關(guān)系管理系統(tǒng)