2017-11-11 223 views
1

我想在我的應用程序在真實條件下運行Espresso測試。問題是測試永遠不會運行,因爲Espresso無法檢測到空閒狀態以便將其事件注入隊列。因此它會以已知的ASYNC_TASKS_HAVE_IDLED錯誤掛起和結束。意式濃縮咖啡測試與永不落幕AsyncTask

爲什麼會發生這種情況?

該應用程序使用SignalR庫,它在應用程序啓動時初始化。 "Library GitHub url"。該庫創建多個長輪詢連接,以便發送和接收來自服務器的所有類型的消息和事件。

這些連接與AsyncTaskclass url)實現,因爲他們最終很少(當他們這樣做,他們會立即重新啓動),咖啡已經很少有機會來檢測idle狀態,並繼續執行。

那麼,是否有解決此問題的一些解決方法?因爲這個,我真的被迫切換到UIAutomator嗎?

注:

  • 禁用SignalR不是一個選項(試過,測試工作,但隨後我錯過了應用程序的點)
  • 嘲諷SignalR也不是一個選項。我想測試真實的數據。

謝謝你的時間。

回答

0

我也有很多異步。我的應用程序的任務.. 所以我要做的就是:

  1. 註冊閒置資源。
  2. 當我需要停止/等待時,使它成爲假。
  3. 當我想繼續時,就變成了真的。
  4. 但是當有很多的電話,這將無法正常工作。否則它在我的簡單情況下工作正常。

@Before 
    public void registerIdlingResource() { 
     Utils.idle = true; 
     mIdlingResource = mActivityRule.getActivity().getIdlingResource(); 
     Espresso.registerIdlingResources(mIdlingResource); 

} 

----------------------------- 

@After 
    public void unregisterIdlingResource() { 
     if (mIdlingResource != null) { 
      Espresso.unregisterIdlingResources(mIdlingResource); 
     } 
    } 


------------------- 
signIn(); 
Utils.idle = false; 
onView(withId(R.id.ll_reports)).perform(click()); 
Utils.idle = false; 

方法中籤後,我等到郵件頁面加載。然後我點擊我的佈局ID爲ll_reports。然後我再等待下一個我想要執行的任務。

+0

謝謝您的回覆。空閒資源是在這種情況下遵循的常用路徑之一,但不幸的是,我無法訪問庫的源,因此無法註冊或取消註冊空閒資源。 我認爲從上面的案例沒有適當的解決方案。 – bajicdusko