基于MVP架構(gòu)的Android單元軟件測(cè)試方法研究與實(shí)現(xiàn)_第1頁
基于MVP架構(gòu)的Android單元軟件測(cè)試方法研究與實(shí)現(xiàn)_第2頁
基于MVP架構(gòu)的Android單元軟件測(cè)試方法研究與實(shí)現(xiàn)_第3頁
基于MVP架構(gòu)的Android單元軟件測(cè)試方法研究與實(shí)現(xiàn)_第4頁
基于MVP架構(gòu)的Android單元軟件測(cè)試方法研究與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、    基于mvp架構(gòu)的android單元軟件測(cè)試方法研究與實(shí)現(xiàn)    【摘要】近幾年移動(dòng)互聯(lián)網(wǎng)行業(yè)發(fā)展迅猛,帶動(dòng)智能平臺(tái)飛速發(fā)展,致使終端智能產(chǎn)品迅速占據(jù)當(dāng)前的消費(fèi)市場(chǎng)。本文通過對(duì)當(dāng)前android系統(tǒng)應(yīng)用開發(fā)模式mvp架構(gòu)的描述,指出該模式下軟件測(cè)試的優(yōu)勢(shì)與不足,進(jìn)而提出mvp架構(gòu)下提高軟件產(chǎn)品質(zhì)量的有效測(cè)試方法。即使用mockito+powermock測(cè)試框架,完成代碼級(jí)別的白盒測(cè)試方法,來滿足提高軟件質(zhì)量的產(chǎn)品需求?!娟P(guān)鍵詞】mvp架構(gòu);白盒測(cè)試隨著移動(dòng)互聯(lián)網(wǎng)時(shí)代的來臨,智能手機(jī)日益走進(jìn)人們的生活,改變著大家的生活方式。近幾年,智能移動(dòng)平臺(tái)發(fā)展尤

2、為迅猛,具有代表性的平臺(tái)包括蘋果公司的ios系統(tǒng),google企業(yè)的android系統(tǒng),加拿大blackberry公司的黑莓系統(tǒng),以及曇花一現(xiàn)的winphone系統(tǒng)等等。截止2018年第一季度統(tǒng)計(jì)數(shù)據(jù),根據(jù)最新的凱度移動(dòng)通信消費(fèi)者指數(shù)(kantarworldpanelcomtech)的智能手機(jī)操作系統(tǒng)數(shù)據(jù)顯示,當(dāng)前android系統(tǒng)在智能平臺(tái)系統(tǒng)中的用戶占據(jù)比重具有絕對(duì)地位,高達(dá)80%左右,特別是在中國(guó),這個(gè)占比率更高達(dá)90%。如此龐大的用戶量,致使android應(yīng)用軟件數(shù)量增長(zhǎng)迅速,但由于android系統(tǒng)從發(fā)布之初,就以開源架構(gòu)為宗旨,完全開放所有代碼及其結(jié)構(gòu),導(dǎo)致android系統(tǒng)產(chǎn)品碎

3、片化問題嚴(yán)重,并且由于android系統(tǒng)相較于傳統(tǒng)pc端產(chǎn)品,具有:內(nèi)存有限,與用戶交互頻繁,系統(tǒng)軟件碎片化,用戶群分散等諸多特點(diǎn),這些不同都給軟件測(cè)試任務(wù)帶來前所未有的挑戰(zhàn),那么如何才能更高效地實(shí)施測(cè)試,提高產(chǎn)品質(zhì)量,就成為解決問題的核心。一、mvp架構(gòu)介紹mvp是model-view-presenter的首字母縮寫,分別表示模型層-視圖層-發(fā)布層,它是mvc架構(gòu)的一種演變。相較于mvc架構(gòu)的缺點(diǎn),mvp架構(gòu)降低了視圖對(duì)模型的依賴與交互,基于mvp架構(gòu)開發(fā),使用戶界面與業(yè)務(wù)邏輯分離,架構(gòu)更靈活,能有效提高程序開發(fā)的效率。model層負(fù)責(zé)數(shù)據(jù)的檢索以及數(shù)據(jù)持久化等操作;view層負(fù)責(zé)ui界面的

4、顯示和用戶交互操作;presenter層作為model與view之間的橋梁,負(fù)責(zé)兩者之間的業(yè)務(wù)邏輯處理。邏輯結(jié)構(gòu)如圖1所示。mvp模式可以更好地將app程序代碼分層,進(jìn)而為單元測(cè)試提供更好的實(shí)踐結(jié)構(gòu)。二、移動(dòng)端單元測(cè)試框架比較單元測(cè)試以詳細(xì)設(shè)計(jì)說明書和源程序清單為依據(jù),常采用白盒測(cè)試用例為主要手段,并組合黑盒測(cè)試用例,來尋找模塊內(nèi)部可能存在的常規(guī)錯(cuò)誤以及邏輯錯(cuò)誤。單元測(cè)試面向的測(cè)試對(duì)象是代碼,其測(cè)試粒度盡可能包含了每一個(gè)最小的完整的功能點(diǎn),并且與邊界、接口等測(cè)試手段結(jié)合,如此細(xì)致的測(cè)試粒度,就可以很好地保證測(cè)試覆蓋率,更好地提高產(chǎn)品質(zhì)量。(一)junit+instrumentition測(cè)試框架

5、junit測(cè)試框架是一款成熟產(chǎn)品,因?yàn)槠溥\(yùn)行于jvm上,所以其只能測(cè)試純java程序,因此,對(duì)于android程序的單元測(cè)試來說,junit具有其局限性。instrumentation是針對(duì)android系統(tǒng)的junit擴(kuò)展,也就是說對(duì)于不涉及android組件的項(xiàng)目,可直接通過junit進(jìn)行單元測(cè)試,而對(duì)于調(diào)用了android組件的項(xiàng)目可通過instrumentation進(jìn)行單元測(cè)試。instrumentation是android系統(tǒng)自帶的測(cè)試模塊,提供了測(cè)試android四大組件的單元測(cè)試接口,但是由于instrumentation偏底層,封裝性較差,并且需要被測(cè)試app的源碼,這就給測(cè)試

6、實(shí)現(xiàn)帶來很多代價(jià),因此,直接用instrumentation而不二次封裝的測(cè)試手段已經(jīng)很少被使用。(二)robolectric測(cè)試框架robolectric測(cè)試框架是近幾年流行的一款封裝性較好的單元測(cè)試工具。其設(shè)計(jì)思路是:通過實(shí)現(xiàn)android啟動(dòng)的相關(guān)庫,完成直接運(yùn)行在jvm上面的android代碼的設(shè)計(jì)思想,從而實(shí)現(xiàn)盡可能脫離android運(yùn)行環(huán)境的編譯環(huán)境,進(jìn)而高效地降低android代碼及測(cè)試用例運(yùn)行速度的設(shè)計(jì)核心。robolecric是tdd模式在android系統(tǒng)上的具體實(shí)現(xiàn),該框架具有高效的運(yùn)行速度,并且在測(cè)試服務(wù)器請(qǐng)求時(shí),對(duì)日常的數(shù)據(jù)模擬和延時(shí)發(fā)送模擬,給多線程狀態(tài)下的測(cè)試提供

7、了很好的解決方法。隨著日益豐富的測(cè)試需求,該框架的缺點(diǎn)日益突出,其缺點(diǎn)主要集中在無法很好地支持異步測(cè)試,需要結(jié)合其他的框架來配合完成更多功能。并且受mockito框架的限制,對(duì)于final,private,static等類型的mock限制,該框架也具有很大的局限性。(三)powermock+mockito測(cè)試框架powermock是一個(gè)擴(kuò)展了其他mock框架的、功能更加強(qiáng)大的框架。powermockito使用一個(gè)自定義類加載類和字節(jié)碼操作來模擬靜態(tài)方法,構(gòu)造函數(shù),final類和方法,私有方法,去除靜態(tài)初始化器等。通過使用自定義的類加載器,簡(jiǎn)化采用的ide或者持續(xù)集成服務(wù)器不需要做任何改變,并且

8、該框架很容易使用。powermock的設(shè)計(jì)宗旨是:用少量的方法和注解擴(kuò)展現(xiàn)有的api來實(shí)現(xiàn)額外的功能。簡(jiǎn)單實(shí)現(xiàn)原理如下:(1)當(dāng)某個(gè)測(cè)試方法被注解preparefortest標(biāo)注以后,在運(yùn)行測(cè)試用例時(shí),會(huì)創(chuàng)建一個(gè)新的loader實(shí)例,然后加載該測(cè)試用例使用到的類(系統(tǒng)類除外)。(2)pm會(huì)根據(jù)mock需求,去修改寫在注解preparefortest里面的class文件(當(dāng)前測(cè)試類會(huì)自動(dòng)加入注解中),以滿足特殊的mock需求。(3)如果需要mock的是系統(tǒng)類的final方法和靜態(tài)方法,pm不會(huì)直接修改系統(tǒng)類的class文件,而是修改調(diào)用系統(tǒng)類的class文件,以滿足mock需求。三、測(cè)試方法實(shí)踐

9、使用mvp架構(gòu)創(chuàng)建android應(yīng)用程序的基本步驟包括:view:是顯示數(shù)據(jù)(model)并且將用戶指令(events)傳送到presenter以便作用于那些數(shù)據(jù)的一個(gè)接口。view通常含有presenter的引用。在android開發(fā)中通常將activity或者fragment作為view層。model:對(duì)于model層也是數(shù)據(jù)層。它區(qū)別與mvc架構(gòu)中的model,在這里不僅僅只是數(shù)據(jù)模型。在mvp架構(gòu)中model負(fù)責(zé)對(duì)數(shù)據(jù)的存取操作,例如對(duì)數(shù)據(jù)庫的讀寫,網(wǎng)絡(luò)的數(shù)據(jù)的請(qǐng)求等。presenter:對(duì)于presenter層它是連接view層與model層的橋梁并對(duì)業(yè)務(wù)邏輯進(jìn)行處理。在mvp架構(gòu)中

10、model與view無法直接進(jìn)行交互。所以在presenter層它會(huì)從model層獲取所需要的數(shù)據(jù),進(jìn)行一些適當(dāng)?shù)奶幚砗蠼挥蓈iew層進(jìn)行顯示。這樣通告presenter將view與model進(jìn)行隔離,使得view和model之間不存在耦合,同時(shí)也將業(yè)務(wù)邏輯從view中抽離。從上述相關(guān)描述中,可以看出mvp架構(gòu)存在如下優(yōu)點(diǎn)及其缺點(diǎn)。優(yōu)點(diǎn):(1)增強(qiáng)了activity中代碼的簡(jiǎn)潔度,保證了activity僅僅處理生命周期的任務(wù)。(2)分離視圖邏輯和業(yè)務(wù)邏輯,分別將其存儲(chǔ)抽象到iview和ipresenter接口中,進(jìn)而使代碼具有更好的可讀性,并且更容易維護(hù),降低維護(hù)成本。(3)更易于進(jìn)行單元測(cè)試

11、。由于android系統(tǒng)的context問題,致使android的單元測(cè)試很難執(zhí)行,但是采用mvp架構(gòu)的系統(tǒng),完美地解決了這個(gè)問題,它可以更好地打樁,更加容易mock。(4)避免activity的內(nèi)存泄漏。由于手機(jī)系統(tǒng)相較于pc端來說,內(nèi)存資源非常有限,那么相對(duì)來說,app更容易發(fā)生oom的問題,而其中最常見的問題就是由于activity泄漏造成的appcrash的重大bug。那么如果可以很好地避免該bug的發(fā)生,就可以更好地增強(qiáng)用戶體驗(yàn)。采用mvp模式,只要在當(dāng)前activity的ondestroy里,分離異步任務(wù)對(duì)activity的引用,就能避免activityleak。缺點(diǎn):(1)從mv

12、p的架構(gòu)的分層結(jié)構(gòu)中可以發(fā)現(xiàn),對(duì)視圖的渲染放在了presenter中,那么會(huì)造成視圖與presenter之間交互頻繁,并且presenter會(huì)隨著視圖的變更而變更。如果presenter過多地渲染了視圖,勢(shì)必會(huì)大大增加presenter與特定視圖間的耦合度。(2)相較來說,mvp架構(gòu)會(huì)在代碼實(shí)現(xiàn)中增加代碼數(shù)量,特別是小項(xiàng)目,代碼量增多是一個(gè)表面看起來很冗余的問題,但是如果是可復(fù)用性非常好的大型項(xiàng)目,mvp架構(gòu)的優(yōu)勢(shì)是非常明顯的,會(huì)給項(xiàng)目的重構(gòu),復(fù)用,以及代碼安全等各個(gè)重要方面帶來非常顯著的優(yōu)勢(shì)。雖然會(huì)對(duì)架構(gòu)設(shè)計(jì)者提出更高的要求,但是,對(duì)于實(shí)踐中項(xiàng)目的聯(lián)調(diào)以及產(chǎn)品進(jìn)度的把握都有很多的益處。四、代

13、碼片段(一)實(shí)現(xiàn)步驟介紹(1)創(chuàng)建ipresenter接口,把所有業(yè)務(wù)邏輯的接口都放在這里,并創(chuàng)建它的實(shí)現(xiàn)presentercompl(在這里可以方便地查看業(yè)務(wù)功能,由于接口可以有多重實(shí)現(xiàn)所有也方便寫單元測(cè)試)。(2)創(chuàng)建iview接口,把所有的視圖邏輯的接口都放在這里,其實(shí)現(xiàn)類是當(dāng)前的activity/fragment。(3)有圖中可以看出,activity里包含了一個(gè)ipresenter,而presentercompl里又包含了一個(gè)iview并且依賴了model。activity里只保留對(duì)ipresenter的調(diào)用,其它工作全部留到presentercompl中實(shí)現(xiàn)。(4)model并不是

14、必須有的,但一定會(huì)有view和presenter。(二)實(shí)例分析五、結(jié)語軟件測(cè)試行為是產(chǎn)品高質(zhì)量的保障行為之一,而高覆蓋率的單元測(cè)試方法又是增強(qiáng)產(chǎn)品健壯性的有效技術(shù),只有使用有效的測(cè)試手段,才能盡可能地降低產(chǎn)品風(fēng)險(xiǎn),提高產(chǎn)品質(zhì)量,減少產(chǎn)品質(zhì)量問題帶來的代價(jià)消耗。綜上所述,引入mvp模式使得應(yīng)用程序的整體架構(gòu)、代碼結(jié)構(gòu)更加清晰,易于理解和組織。由于將業(yè)務(wù)邏輯與視圖邏輯的代碼拆分,并分別進(jìn)行單元測(cè)試,整體提高了可測(cè)試性,并增強(qiáng)代碼健壯性。雖然相比較于mvc模式,mvp架構(gòu)引入接口帶來了一定的代碼量,但是mvp架構(gòu)為android應(yīng)用程序提供更清晰的層次結(jié)構(gòu),更加有效地降低視圖與業(yè)務(wù)之間的耦合度等優(yōu)

15、點(diǎn),都是追求高質(zhì)量代碼的核心需求。參考文獻(xiàn)1李燦彬,甘宏.基于mvp架構(gòu)跨平臺(tái)的移動(dòng)應(yīng)用與開發(fā)j.科技廣場(chǎng),2017(05):4548.2王念橋.應(yīng)用mvp模式改進(jìn)軟件架構(gòu)j.計(jì)算機(jī)時(shí)代,2012(04):3738,403劉升貴.基于mvp模式的android應(yīng)用程序?qū)崿F(xiàn)及其單元測(cè)試研究j.福建電腦,2017(07):9495.4于浩.android平臺(tái)jni代碼單元測(cè)試方法研究d.成都:西南交通大學(xué),2015.5苑樹慶.基于android平臺(tái)的自動(dòng)化測(cè)試工具的設(shè)計(jì)與實(shí)現(xiàn)d.沈陽:東北大學(xué),2014.6陳麗萍,張勇,丁智敏.自動(dòng)化單元測(cè)試框架easymock分析及其應(yīng)用j.巢湖學(xué)院學(xué)報(bào),2014(06):3438.7t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論