2014-06-25 211 views
-1

使用Android測試框架測試Android應用程序時,如何使測試等待我在繼續之前等待網絡響應。我不想使用Thread.sleep,因爲我不確定要等多久。還嘗試了waitForIdleSync(),但它似乎不工作。有沒有其他方法?Android單元測試

我有enterCredentials方法輸入用戶名和密碼,然後單擊登錄按鈕。在獲取用戶對象以驗證憑據之前,我需要等待一段時間才能獲得用戶對象並將其保存在數據庫中。我想要一個替代Thread.sleep()在這裏。我已經嘗試了waitForIdleSync(),但似乎沒有工作。

@Override 
    protected void setUp() throws Exception { 
     super.setUp(); 
     mActivity = getActivity(); 
     enterCredentials();  
     Thread.sleep(2000); 
     testLoggedInUser(); 

    } 

    public void testLoggedInUser() { 
     mMyApplication = this.getInstrumentation().getTargetContext().getApplicationContext(); 
     User user = mMyApplication.getUser(); 
     String email = user.getEmail(); 
     assertEquals(EMAIL, email); 
    } 

    public void enterCredentials() { 

     final EditText mUsername = (EditText) mActivity.findViewById(R.id.email); 
     final EditText mPassword = (EditText) mActivity.findViewById(R.id.password); 
     final Button login = (Button) mActivity.findViewById(R.id.logIn); 
     mActivity.runOnUiThread(new Runnable() { 

      public void run() { 
       mUsername.setText(EMAIL); 
       mPassword.setText(PASSWORD); 
       login.performClick(); 
      } 
     }); 

    } 
+0

..很??請細化你的問題,因爲我不明白你的問題是什麼。 – cybermonkey

+1

你正在運行什麼樣的測試?,除了接受/集成測試你的測試應該是快速和獨立的,你應該模擬/間諜/ ......你的界限,特別是網絡請求 – tkanzakic

+0

我想在我的應用程序中測試登錄功能,我輸入憑據併發送發佈請求,服務器返回給我一個用戶對象。所以在測試時我想等待接收這個用戶對象,然後我可以驗證用戶憑證。那麼在這種情況下,我該如何讓測試等待呢? – user3773337

回答

1

您可以在一個大線程內運行兩個線程。一個線程將等待連接同步。你可以把它變成一個if語句或者其他任何東西,並且有時間控制,只有當同步成功時纔會調用另一個線程。如果達到您不希望測試運行的時間限制,則可以退出應用程序或您想要執行的任何操作。因此,您實際上會避免使用Thread.sleep(),並且還會有一些時間控制。

但是,如果您不想等太久,可以使用小間隔的Thread.sleep()和if語句來檢查連接是否最終成功。只需在退出之前嘗試一下。