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