日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何在Android上測試異步任務

最近,在Sixt(德國比較大的一個汽車租賃網(wǎng)站)上,我們把我們的開發(fā)環(huán)境從Eclipse遷移到Android Studio。這也就意味著我們進入了新的編譯系統(tǒng)——Gradle,并且把TDD(測試驅(qū)動開發(fā))和CI(持續(xù)集成)納入我們的軟件開發(fā)流程。這里不是 討論在軟件開發(fā)中引入CI會帶來怎樣的好處,而是討論在Android中當測試UI之外的線程時會出現(xiàn)的問題。

創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站制作、網(wǎng)站建設與策劃設計,石峰網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設十多年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:石峰等地區(qū)。石峰做網(wǎng)站價格咨詢:18982081108

Android中的測試(寬泛的定義)是一個單元測試集合的擴展。涉及初始化、關閉測試,包含setUp()和tearDown()操作,使用反射 的方式推斷出不同的測試方式(從JUnit4開始我們就可以使用注釋來指定的優(yōu)先級和執(zhí)行所有測試)。一個典型的測試結構如下:

 
 
  1. public class MyManagerTest extends ActivityTestCase { 
  2.    
  3.     public MyManagerTest(String name) { 
  4.         super(name); 
  5.     } 
  6.    
  7.     protected void setUp() throws Exception { 
  8.         super.setUp(); 
  9.     } 
  10.    
  11.     protected void tearDown() throws Exception { 
  12.         super.tearDown(); 
  13.     } 
  14.    
  15.     public void testDummyTest() { 
  16.         fail("Failing test"); 
  17.     } 
  18.    

這是一個非常明顯的示例:實際開發(fā)中,我們想要測試例如HTTP響應、SQL存儲等等。在Sixt我們遵從一種Manager/Model方法:每 個Model包含一個實體(車、顧客等)的表現(xiàn)。每個Manager用不同的模型(例如,我們的LoginManager可能需要用戶與之交互的模型)聚 合成一套功能。

大多數(shù)的Manager集中執(zhí)行HTTP請求是要從后臺獲取數(shù)據(jù)。例如,我們用下面的代碼來執(zhí)行用戶的登錄:

 
 
  1. mLoginManager.performLoginWithUsername("username", "password", new OnLoginListener() { 
  2.     @Override 
  3.     public void onFailure(Throwable throwable) { 
  4.         fail(); 
  5.     } 
  6.   
  7.     Override 
  8.     public void onSuccess(User customer) { 
  9.     //.. 
  10.     } 
  11. }); 

應用到我們自己的測試集合后,當?shù)玫筋A期之外的結果時,只是讓這一結果失敗。我們可以看到為什么在onFailure()函數(shù)中我們調(diào)用了 fail()。接下來,即使我用一個錯誤的用戶名也能通過這個測試。思前想后,測試似乎是按照代碼順序執(zhí)行的,但并沒有等到回調(diào)函數(shù)的結果返回再向下執(zhí) 行。

這顯然不是一個好方法。因為現(xiàn)在的程序經(jīng)常通過異步任務和回調(diào)方法從后臺獲取數(shù)據(jù)。嘗試UIThread測試仍然不行。

***,我發(fā)現(xiàn)下面這種方法可以行得通。只是用簡單的CountDownLatch信號對象來實現(xiàn)wait-notify機制(你也可以用syncronized(lock){... lock.notify();},只是這樣代碼并不美觀而已)

那么之前的代碼就變成了下面的模樣:

 
 
  1. final CountDownLatch signal = new CountDownLatch(1); 
  2. mLoginManager.performLoginWithUsername("username", "password", new OnLoginListener() { 
  3.     @Override 
  4.     public void onFailure(Throwable throwable) { 
  5.         fail(); 
  6.         signal.countDown(); 
  7.     } 
  8.   
  9.     Override 
  10.     public void onSuccess(User customer) { 
  11.         signal.countDown(); 
  12.     } 
  13. }); 
  14. signal.await(); 

分享標題:如何在Android上測試異步任務
當前網(wǎng)址:http://www.5511xx.com/article/ccejods.html