蘑菇街支付金融Android單元測試實踐(6)

發表于:2016-05-20來源:推酷作者:不詳點擊數: 標簽:單元測試
9. 未來的打算 使用Groovy和 RoboSpock 或者是Kotlin和 Spek ,真正實現BDD,這是很可能的事情,只是目前我們這邊還沒太多那方面的實踐,因此就不說太多了。以

  9. 未來的打算

  使用Groovy和 RoboSpock 或者是Kotlin和 Spek ,真正實現BDD,這是很可能的事情,只是目前我們這邊還沒太多那方面的實踐,因此就不說太多了。以后有一定實踐了,到時候可以再更大家交流。

  文中部分代碼: https://github.com/ChrisZou/android-unit-testing-tutorial

  QA環節

  Q:如何測試界面交互?如點擊拖動等。

  A:Robolectric提供了非常豐富的測試交互的方式,比如findViewById(id).performClick()?;旧?,使用 Robolectric,你可以像正常寫安卓代碼那樣寫測試代碼。甚至正常情況下沒有的方法,Robolectric也提供了。

  Q:我也是后來才接觸代碼測試的,然后開始喜歡上寫代碼測試,但當嘗試為以前的代碼寫代碼測試的時候,發現以前的結構很難寫代碼測試,請問你們也有遇到這種情況么?如何解決。

  A:這的確是比較頭疼的問題,建議可以看看《Working Effective With Legacy Code》一般來說就是挑選一個比較好下手的地方,做好隔離寫好測試,在重構。那本書里面提出了很多簡單除暴的方式,比如把一個方法或變量從 private改成public等等。

  Q:自繪控件一般怎么去做自動化測試?

  A:自定義控件一般只測他的功能性的部分,樣式、動畫這樣的一般不測。

  測試方式基本就是把這個控件new 出來,然后調用它的public 方法,驗證它的text是不是正確等等?;蛘呤窍鄳氖录袥]有觸發,這個借助Robolectric可以做到。

  Q:業務測試數據,是自己本地寫的邏輯,還是結合服務器的真實邏輯?

  A:對于單元測試來說,一般是自己mock服務器的返回結果,因為服務器返回結果是不是正確的,其實不是我們應該測的情況,而是服務器應該測的情況,我們要測的,是服務器返回正確的結果我們就顯示正確的結果,服務器返回錯誤的結果,我們就顯示錯誤的返回信息。

  Q:MVP的情況下view和presenter的回調函數需要做測試嗎,如果需要怎么做?

  A:要測,把presenter new出來,直接調用它的那個方法就是了。

  Q:對于依賴環境的測試,比如有無網絡,不同的網絡測試類型,不同的網絡類型,網絡超時等,這種怎么去做單元測試比較好?在比如測試試寫文件的方法,怎么去構造剩余空間不足、空間足夠的環境?

  A:這些情況需要借助系統的api(比如NetworkManager),去判斷情況,這種情況可以把這些系統的api mock掉,指定讓他返回你想要指定的結果。

  Q:為啥方法名不是駝峰命名法?

  A:因為常常需要為同一個方法寫好幾個測試方法,每個方法測試的目的可能不一樣,這個時候往往會把測試方法寫的很長,需要一段的駝峰大小寫切換,這樣可讀性不高,寫起來又麻煩,或者是用下劃線去分隔,這樣寫起來又很麻煩。因此我們特別寫了那個annotation和junit rule,目的就是可以讓單元測試的方法命名可以隨意一點。

  Q:robolectric一般只能模擬點擊到一個子控件,但是自繪的控件可能不滿足,自繪控件一般是為了較少layout的嵌套,而實現自繪的,點擊控件的不同區域可能會觸發不同的事件,以前我們的做法非常拿到,需要專門去根據這個自繪控件去這一大堆的測試代碼,不知道有沒有什么好的方法?

  A:這種情況的確沒碰到過,我覺得可以看看Robolectric有沒有指定點擊這個view的某個坐標的方法,以我的經驗,要實現你說的那種功能,應該是在這個view的ontouch時間里面去處理把,可以看看Robolectric有沒有類似的模擬ontouch的方法,估計應該是有的。

  感謝徐川對本文的審校。

  給InfoQ中文站投稿或者參與內容翻譯工作,請郵件至editors@cn.infoq.com。也歡迎大家通過新浪微博(@InfoQ,@丁曉昀),微信(微信號: InfoQChina )關注我們。

原文轉自: http://www.infoq.com/cn/articles/mogujie-android-unit-testing

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97