999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

自動化單元測試框架EasyMock分析及其應用

2014-12-12 08:58:04陳麗萍丁智敏
巢湖學院學報 2014年6期
關鍵詞:解決方案方法

陳麗萍 張 勇 丁智敏

(巢湖學院計算機與信息工程學院,安徽 巢湖 238000)

1 引言

單元測試是極限編程的基礎[1,2],單元測試的目的是保證每個程序模塊能夠正確運行。然而在實施單元測試驅(qū)動開發(fā)過程中,往往和被測模塊交互的系統(tǒng)內(nèi)某個模塊或系統(tǒng)外實體尚未開發(fā)出來,此時可借助Mock Objects技術[3]。它從測試中分離了外部不需要的因素并且?guī)椭_發(fā)人員專注于被測試的功能[4]。EasyMock框架[5]是Mock Objects技術的實現(xiàn)框架。它通過使用動態(tài)代理提供對接口和類創(chuàng)建Mock對象,并利用Mock對象模擬協(xié)同模塊,從而使單元測試順利進行。在開發(fā)時,將EasyMock、Junit集成到IDE中可方便的完成自動化測試[6]。本文在總結EasyMock框架的特點基礎上,介紹了基本測試框架和分析了功能優(yōu)缺點,并且針對缺點給出了相應的解決方案。

圖1 EasyMock功能類

2 Easymock框架介紹

EasyMock[7]擁有很多的API函數(shù),可以直接用在測試程序中,其主要的功能類結構如圖1所示:

2.1 EasyMock類

EasyMock框架中與用戶聯(lián)系最緊密的類EasyMock類,該類提供了create,replay和verify mock對象等靜態(tài)方法以及一系列的標準的參數(shù)匹配器。

2.2 IMocksControl接口

IMocksControl主要用于創(chuàng)建Mock對象,并負責管理Mock對象。

2.3 IExpectionSetters接口

IExpectionSetters接口主要是對Mock對象期望調(diào)用的方法進行一些相關的設置。

2.4 MocksControl類

MocksControl類主要提供了用于添加Mock對象的預期行為和實際調(diào)用的方法。

3 EasyMock框架應用

通過EasyMock創(chuàng)建Mock對象,并應用Mock對象來模擬外部協(xié)同模塊,完成單元測試,需經(jīng)歷五個步驟。如圖2所示:

圖2 EasyMock應用步驟

3.1 創(chuàng)建Mock對象

首先創(chuàng)建被模擬模塊的Mock對象,這里可以通過兩種方式來完成。一種是使用EasyMock的creatMock方法直接創(chuàng)建;另一種是通過Easy-Mock類的createControl方法,先創(chuàng)建IMockControl對象,進而創(chuàng)建Mock對象。

3.2 錄制Mock對象預期行為

接下來錄制Mock對象的預期行為即為創(chuàng)建的Mock對象設定預期的方法調(diào)用和方法調(diào)用所產(chǎn)生的輸出。

3.3 設置對象為replay狀態(tài)

接著在使用Mock對象進行實際的測試前,需要將Mock對象的狀態(tài)切換為replay狀態(tài)。設置Mock對象為replay狀態(tài)可以使用replay方法。

3.4 執(zhí)行測試并檢查返回結果

之后是執(zhí)行需要測試的業(yè)務代碼并檢查代碼是否返回正確的結果。

3.5 驗證

最后是驗證。它來驗證整個過程中,Mock對象是否真正完成了record階段的設定。

4 EasyMock分析與解決方案

4.1 EasyMock優(yōu)缺點分析

Easymock通過檢查附加給測試響應的斷言來驗證測試的結果和交互行為是通過還是失敗,有大量的Junit的斷言可供選擇。軟件結構的設計會導致Easymock框架的使用情況。具體優(yōu)缺點分析如下:

4.1.1 EasyMock的優(yōu)點

(1)EasyMock提供了動態(tài)構建Mock對象的方法,而無需開發(fā)人員額外實現(xiàn)Mock對象的代碼,很大程度上減少了工作量。

(2)EasyMock可以完成多種Mock對象的測試場景。例如:當真實協(xié)同對象實際還不存在(如需要和其他開發(fā)人員開發(fā)的模塊交互);當真實協(xié)同對象行為難于觸發(fā)(如根據(jù)需要制造網(wǎng)絡故障)等。

4.1.2 EasyMock的缺點

(1)EasyMock通過創(chuàng)建Proxy的方式來實現(xiàn)的Mock對象。因而Mock對象不能訪問靜態(tài)方法,這就造成EasyMock不能模擬靜態(tài)方法。

(2)EasyMock通過創(chuàng)建Proxy的方式來實現(xiàn)的Mock對象,同時Java的封裝特性,使得Mock對象不能訪問私有方法和final方法。這就造成EasyMock不能模擬私有方法和final方法。

(3)EasyMock 不能對 Object類的 equals(),hasCode()、toString()方法模擬。 也就是說,Easy-Mock對這幾種方法模擬時,無法改變其行為,它們?nèi)耘f按照默認的方式執(zhí)行。此問題還有待于進一步的研究和分析。

4.2 針對EasyMock缺點的具體解決方案

EasyMock不能模擬靜態(tài)方法。為了克服該缺點,這里可以通過整合EasyMock和PowerMock。PowerMock使用CGLib來操縱字節(jié)碼來實現(xiàn)靜態(tài)方法的Mock對象,因此可以對靜態(tài)方法模擬支持[8]。因此在Mock方法時,使用EasyMock模擬普通方法,用PowerMock去模擬靜態(tài)方法。Easy-Mock和PowerMock的結合可以更好地實現(xiàn)測試。

EasyMock不能模擬私有方法和final方法。為了解決該問題,可以通過使用字節(jié)碼技術修改class文件中字節(jié)碼的關鍵詞,將私有方法變?yōu)楣蟹椒ê蚮inal修飾符去掉。在這里借助Java的字節(jié)碼操作工具javassist,因為javassist可以在不需要了解虛擬機指令前提下,使用java編碼形式動態(tài)對類轉(zhuǎn)換、修改class中的方法。這樣可以將含有final或private修飾符的類在被當前JVM加載前對此類修改。這樣去除final和private標識符后,進而使用EasyMock進行測試。

5 應用EasyMock框架測試及結果分析

5.1 測試示例

5.1.1 示例程序 1

使用EasyMock框架對一個應用程序測試。這里的應用程序結構設計如圖3所示:

圖3 結構設計(1)

這里待測試類為Calculator,Calculator類中add方法完成兩個整數(shù)之和,而add方法使用了Math類的addInteger方法。Calculator類和Math類對應代碼如下:

5.1.2 示例程序 2

使用框架對另一個應用程序測試。這里的應用程序結構設計如圖4所示:

圖4 結構設計(2)

這里待測試類為Calculator,Calculator類中add方法完成兩個整數(shù)之和,而add方法使用了Math類的addInteger方法。Calculator類和Math類對應代碼如下:

5.2 測試結果分析

這里測試平臺為 Eclipse-sdk-3.3, 使用JUint4.10 和 EasyMock3.2。將 EasyMock 框架與注入解決方案后的EasyMock框架分別對示例程序1,2進行測試。

使用EasyMock框架和注入解決方案后的EasyMock框架對示例程序1測試,測試結果分別如圖5的(a),(b)所示:

圖5 對示例程序1測試結果

使用EasyMock框架和注入解決方案后的EasyMock框架對示例程序2測試,測試結果分別如圖6 的(a),(b)所示:

圖6 對示例程序2測試結果

由此可見,EasyMock框架在模擬對象時有一些限制:不能對靜態(tài)方法、私有方法和final方法模擬,導致測試失敗。而使用了注入解決方案后的EasyMock框架可以應用于更多的測試情況,應用范圍更廣。

6 結束語

由于IT界對測試驅(qū)動開發(fā)技術的持續(xù)關注與偏愛,軟件單元測試也成為人們研究的熱點,EasyMock是單元測試的Mock工具之一。本文研究了EasyMock測試框架和應用;關注該工具在實際測試中的可行性,并且根據(jù)實際的需要采用整合Powermock框架和利用字節(jié)碼操作工具javassist對類文件的修改來減少EasyMock框架的Mock對象的限制,測試結果證明了更好地滿足實際的需要。

[1]Erickson J,Lyytinen K,Siau K.Agile Modeling,Agile Software Development,and Extreme Programming:The State of Research[J].Journal of Database Management,2005,(4):88-100.

[2]Mordinyi R,Kuhn E,Schatten A,Towards an Architectural Framework for Agile Software Development[C]//International Conference and Workshops on Engineering of Computer Based Systems.American,2010:276-280.

[3]Mackinnon T,Freeman S,Craig P.Endo-Testing:Unit Testing with Mock Objects[C]//Proceeding of the eXtreme Programming and Flexible .Italy,2000:21-23.

[4]Jafadeesh Nandigam,Tao Yonglei.Using mock object frameworks to teach object-oriented design principles[J].Journal of Computing Sciences in Colleges,2010,(1):40-48.

[5]Tammo,F(xiàn)reese.EasyMock:Dynamic Mock Objects for Junit[C]//Proceedings of the 3rd International Conference on Extreme Programming and Agile Processes in Software Engineering.Italy,2002:1-5

[6]Petar Tahchiev,Felipe Leme,Vincent Massol,et al.Junit實戰(zhàn)[M].王魁,譯.北京:人民郵電出版社,2012:96-129.

[7]EasyMock 官方網(wǎng)站[EB/OL].(2013-7-11)[2014-1-29]http://www.easymock.org/.

[8]PowerMock 官方網(wǎng)站.[EB/OL].(2013-11-19)[2014-1-29]http://www.Powermock.org/.

猜你喜歡
解決方案方法
艾默生自動化解決方案
解決方案和折中方案
學習方法
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
4G LTE室內(nèi)覆蓋解決方案探討
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
7大睡眠問題解決方案
母子健康(2015年1期)2015-02-28 11:21:44
Moxa 802.11n WLAN解決方案AWK-1131A系列
主站蜘蛛池模板: 国产自视频| 欧美午夜视频| 亚洲三级电影在线播放| 香蕉久久永久视频| 亚洲成人在线网| 不卡的在线视频免费观看| www.亚洲一区二区三区| 97久久人人超碰国产精品| 欧美精品一区在线看| 精品国产三级在线观看| 波多野结衣一区二区三区88| 国产一区二区网站| 在线欧美日韩国产| 成人国产免费| 青青热久麻豆精品视频在线观看| 久综合日韩| 72种姿势欧美久久久久大黄蕉| 最新国产午夜精品视频成人| 精品精品国产高清A毛片| 欧美自慰一级看片免费| 国产91小视频| 九色视频在线免费观看| 欧美日韩va| 欧美色香蕉| 免费啪啪网址| 久久伊人操| 九九免费观看全部免费视频| 国产在线一区视频| 在线看AV天堂| 最新午夜男女福利片视频| 99热这里只有精品国产99| 国产青榴视频在线观看网站| a亚洲视频| 久久精品国产精品一区二区| 亚洲一级毛片在线观播放| 99精品久久精品| 好吊色国产欧美日韩免费观看| 中文字幕首页系列人妻| 午夜人性色福利无码视频在线观看| 国产小视频网站| 国产精品无码AⅤ在线观看播放| 国产成人精品一区二区秒拍1o| 亚洲av片在线免费观看| 另类欧美日韩| 国产精女同一区二区三区久| 亚洲午夜福利在线| 波多野结衣国产精品| 91精品专区国产盗摄| 日韩毛片免费视频| 五月天在线网站| 在线观看免费国产| 亚洲av无码人妻| 丁香五月激情图片| 五月婷婷丁香色| 国内精自视频品线一二区| 欧洲日本亚洲中文字幕| 亚洲福利网址| 狠狠色狠狠综合久久| 欧美日本二区| 99ri精品视频在线观看播放| 男女男免费视频网站国产| 日韩AV手机在线观看蜜芽| 久久91精品牛牛| 国产成人免费| 亚洲精品成人片在线观看| 国内丰满少妇猛烈精品播| 欧美亚洲第一页| 日韩成人在线网站| 欧美特级AAAAAA视频免费观看| 超碰免费91| 久久女人网| 欧美日韩一区二区三| av天堂最新版在线| 亚洲最大福利视频网| 在线亚洲天堂| 超清无码熟妇人妻AV在线绿巨人| 天天操天天噜| 激情综合网激情综合| 看av免费毛片手机播放| 国产福利免费视频| 免费欧美一级| 国产日韩AV高潮在线|