亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android開發筆記之:對實踐TDD的一些建議說明

2020-04-11 12:23:32
字體:
來源:轉載
供稿:網友
最近部分采用了TDD的方法來開發一個模塊,小有收獲特此總結一下:
1. TDD的基本原則
TDD的最核心思想就是先明確需求,且用代碼的方式量化,明確需求標準,然后進行編碼實現以達成由代碼測試來衡量的標準。
那么它要求,先把需要標準寫出來,每次只寫一個。編碼實現通過達到,并剛好滿足這個標準。這樣一點一點的迭代。
這樣有三個好處:一個是先明確標準,不至于我們迷失主題,偏離方向。有標準在檢測,保證代碼是正確的。僅滿足當前測試,不至于過早優化和過度設計。
2. TDD的難點
難點在于如何設計這個測試標準,
1)讓它足夠小,是一個需求單元;
2)成為標準,也就是如何檢測正確性;
3)就是如何在最大程度模擬真實運行的場景,而不是為了測試而寫出許多額外的工具,也就是說測試應該跟真實的項目代碼一樣,不應該有多余的東西。
這關鍵在于要分析挖掘需求,并細化需求。如果都像書中的例子那樣測試一些API那倒是很好寫,因為測試代碼跟真實的App代碼用一樣的方式來調用API,而且API的功能也會有明確的描述。但現實情況并非如此,比如很多框架就很難測試,很多對象和創建和控制都是由框架來做,你無法像控制。這就導致了很難寫測試用例。
還有就是多線程,由于線程帶來的不確定性,有很多偽失敗,這可以參考書,書中有方法。
3. Android中的TDD
老實說,在Android完全用TDD的方法來開發是不可能的。原因如下:
1. Android中的應用程序主要結構是四大組件:Service,Activity和Provider和Receiver這四東西的創建和銷毀都是由框架來控制。所以你不可能像書中例子那樣去測試它們,因為有些限制讓你無法用代碼來測試。
2. 有些東西是系統框架的回調或者很基本東西根本不用寫TestCase。比如View的Click/LongClick/Touch事件的處理之類的,或者Activity的生命周期回調,或者OptionsMenu/ContextMenu之類的。
3. SDK中的用于測試的API功能太弱
這就導致了,為了測試一個小功能需要做很多工作和寫很多代碼,遠大于直接實現。比如測試一個彈出的Dialog,如果直接實現很容易;但如果用代碼來測試就要多3,4倍的工作量,遠大于直接實現。
4. 那么在Android中應該如何運用好TDD呢?以下是一些建議:
1. 使用Robotium
這是強大的工具,它比SDK中的東西可是方便的很多比如searchText,clickMenu之類的接口非常的方便和實用。
2. 自動測試+手動測試
同樣要遵循原則,但是對于測試用例,沒有必要完全用代碼來寫,可以部分手動測試:一般的原則來講如果自動測試比較方便的實現就寫TestCase,如果手動測試很方便就手動測試,這沒有死規則要看具體的情況。
比如,View的事件,Activity的事件,Activity的Menu,Dialog之類的與交互相關的東西,以及跨應用交互的用例最好手動來測試,因為這些東西用代碼來測試更麻煩。
但對于一些涉及數值,計算,量化等就用代碼來做。比如下載一個文件,設定好路徑后就可以直接用File對象來檢測文件是否下載成功。
3. Provider必須要測試
Provider提供的是API,它非常好測試也容易寫,又是一個項目的基本設施,所以必須要好好測試,否則如果在Activity上某條數據有問題,你必須要確定是顯示上出了問題還是Provider里出了問題。通常CRUD必須測試,還有就是where語句,以及逆向測試,必須要檢測Uri的合法性等,還有就是要檢測對特殊字符的處理,比如'和"。
4. 除Service和Activity以外的東西,特別是自己實現的類似API的類,如果里面涉及一些業務邏輯也要進行測試。這就跟書中的例子差不多了,測試的難易成就也取決于業務的分解,設計和耦合度了。
5. 用反射來測試類的內部
對于Service和Activity雖然可以在TestCase中拿到它的實例,但是Service和Activity是一個組件單元在實際中并不會Public太多的接口,它們是處于最頂端的調用其他接口,而自己不會,也不應該公開接口給別人用,原因就是它們的創建和生命周期的管理都是由系統控制的,別處不應該有太多對它們的引用。
那么當要測試Service和Activity內部時怎么辦呢?比如要測試某個Service內部的一個int[] mPlaylistQueue。我們總不能為了寫Case而在Service中加接口吧!這時就要用反射機制來取出這個成員的實例,然后檢查它的數據。
6. 有些東西必須手動測試,自動化無法完成
TestCase是有特殊的Context和MockObject的,它是對真實Android運行的一個最大化的模擬,它并不跟應用真正運行時的情況完全一樣!而且由于Permission的原因,某些事情Instrumentation是無法做的,比如Alarm,日期等Instrumentation是無權限更改的。這些必須要靠手動測試。
還有就是Service和Activity的初始化和銷毀,特別是銷毀,沒辦法測試,也就是說對于onDestroy()里面的東西,還真的不好去測試。第一,你不知道它何時被回調到;第二,執行到它時對象快被銷毀了,你持有的引用不一定有效了;第三,成員對象是否都有效也無法得知。對于onDestroy只能通過調試手段手動的去測試。
總之,在我看來,TDD的核心思想是測試先來,實現后來。但如何測試并沒有列規定非要用代碼,所以根據實際情況,選擇最佳的測試手段。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
美女视频黄免费的亚洲男人天堂| 久久影视电视剧免费网站清宫辞电视| 伊人亚洲福利一区二区三区| 亚洲无限乱码一二三四麻| 国产日韩在线观看av| 91久久精品国产91性色| 精品久久久久久久久中文字幕| 最近2019年好看中文字幕视频| 日韩黄色av网站| 精品一区二区三区电影| 97色在线播放视频| 国产精品电影网| 亚洲www在线| 日韩一区二区精品视频| 欧美激情精品久久久久| 国产精品日韩av| 亚洲欧美中文日韩在线| 欧美视频在线观看免费| 精品成人乱色一区二区| 亚洲人成啪啪网站| 欧美肥婆姓交大片| 欧美国产第二页| 亚洲国产精品免费| 国产精品女主播视频| 欧美在线视频在线播放完整版免费观看| 亚洲成年网站在线观看| 久久色精品视频| 亚洲福利影片在线| 国产一区二区三区欧美| 日韩中文字幕欧美| 久久久久久18| 亚洲精品视频播放| 欧美大片欧美激情性色a∨久久| 亚洲精品国产美女| 国产精品亚洲一区二区三区| 亚洲午夜久久久久久久| 欧美肥老妇视频| 少妇高潮久久77777| 欧美在线视频网站| 欧美大片免费观看| 中文字幕亚洲精品| 亚洲精品国产精品乱码不99按摩| 成人日韩av在线| 免费成人高清视频| 国产精品三级久久久久久电影| 日韩电视剧在线观看免费网站| 亚洲在线第一页| 色老头一区二区三区| 亚洲综合中文字幕在线| 91高潮在线观看| 亚洲无限av看| 欧美成人午夜免费视在线看片| 成人信息集中地欧美| 日韩在线免费高清视频| 亚洲国产精品视频在线观看| 亚洲欧美自拍一区| 97超级碰碰人国产在线观看| 亚洲日韩中文字幕在线播放| 日韩黄色av网站| 欧美多人爱爱视频网站| 欧美有码在线观看| 久久国产精品久久精品| 亚洲精品免费网站| 国产大片精品免费永久看nba| 国产亚洲成av人片在线观看桃| 国产成人高潮免费观看精品| 亚洲一区二区三区成人在线视频精品| 久久av在线播放| 亚洲欧美日韩视频一区| 久久久久久综合网天天| 国产第一区电影| 国产mv久久久| 欧美日韩国产二区| 欧美日韩亚洲一区二区| 91精品久久久久久久久中文字幕| 深夜成人在线观看| 国产精品香蕉在线观看| 成人精品视频久久久久| 97免费在线视频| 欧美性猛交xxxx乱大交3| 欧美电影免费观看| 亚洲视频999| 日韩欧美在线视频观看| 亚洲精品videossex少妇| 久久久精品久久久| 中文字幕日韩欧美在线视频| 欧美日韩精品国产| 亚洲欧美视频在线| 亚洲欧美日韩中文在线制服| 欧美丝袜一区二区三区| 欧美中文字幕在线| 精品久久久久久亚洲精品| 久久夜色精品国产欧美乱| 国产区亚洲区欧美区| www.亚洲天堂| xxav国产精品美女主播| 欧美国产中文字幕| 久久精品99久久久香蕉| 国产精品丝袜高跟| 国产视频观看一区| 日韩免费视频在线观看| 久久久精品网站| 国产在线视频91| 97视频在线观看视频免费视频| 欧美大尺度在线观看| 精品国产乱码久久久久久虫虫漫画| 精品久久久久久亚洲国产300| 亚洲美女性视频| 2019日本中文字幕| 亚洲人成网站在线播| 亚洲视频精品在线| 国产一区二区三区四区福利| 国产成人精彩在线视频九色| 欧美在线视频在线播放完整版免费观看| 成人免费网视频| 亚洲午夜未删减在线观看| 亚洲人av在线影院| 午夜精品久久久久久久99黑人| 欧美精品激情在线观看| 日韩中文字幕在线| 欧美精品www| 久久中国妇女中文字幕| 亚洲成色777777在线观看影院| 久久免费成人精品视频| 日韩精品中文在线观看| 日本成人免费在线| 日韩中文在线中文网三级| 91视频国产精品| 国产在线播放91| 91久久精品美女高潮| 亚洲图片制服诱惑| 国语对白做受69| 日韩精品欧美国产精品忘忧草| 欧美激情欧美激情在线五月| 精品国产乱码久久久久久天美| 日本高清久久天堂| 亚洲国产成人精品电影| 亚洲精品电影久久久| 亚洲天堂第二页| 一区二区三区无码高清视频| 亚洲国产高清自拍| 综合欧美国产视频二区| 日韩一区二区在线视频| 亚洲一区二区自拍| 久久夜色撩人精品| 日韩av中文字幕在线播放| 国色天香2019中文字幕在线观看| 久久夜色精品亚洲噜噜国产mv| 久久视频免费观看| 欧美丰满少妇xxxxx| 91热精品视频| 岛国av午夜精品| 一区二区三区视频在线| 成人伊人精品色xxxx视频| 亚洲欧美国产制服动漫| 日韩精品视频免费在线观看| 亚洲色图在线观看| 国产91精品高潮白浆喷水| 最近2019中文免费高清视频观看www99| 日本精品久久电影| 9.1国产丝袜在线观看| 日韩最新免费不卡| 亚洲肉体裸体xxxx137| 午夜精品国产精品大乳美女|