6

我知道有很多這個問題,但我找不到任何東西來幫助我:(Android:濃咖啡不會等到片段或活動顯示,所以每個測試失敗

我試圖使用Espresso用於爲android應用程序生成用戶界面測試打擊依賴項問題後(因爲某些庫在不同版本中包含兩次以作爲其他庫的依賴項)我仍然無法創建工作測試...

I瞭解IdlingResource,但據我瞭解,espresso等待開箱,直到主線程和AsyncTaskPool在運行任何測試之前都處於空閒狀態。

爲了與它取得聯繫,我製作了一個簡單的應用程序,其中包含兩個活動,一個閃屏和一個主要活動。 濺射屏幕包含起始mainActivity

new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
    finish(); 
    Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class); 
    startActivity(intent); 
    } 
}, 3000); 

我還試圖用的AsyncTask這個,但似乎沒有因爲每次考試無法正常工作之前,像這樣等待三秒鐘。

僅測試檢查是否通過顯示在視圖含有確定文本一個TextView:

onView(withText("DummyText")).check(matches(notNullValue())); 

我認爲這將不會是難以建立一個簡單的測試...

因爲我必須對api> = 16進行測試,所以我需要espresso。對我來說,我通過使用uiAutomator(我知道這是爲api> = 18)檢查它,但有智能邏輯等待顯示的東西.....和那完美的作品...

回答

5

什麼是你的activityRule?因爲如果它是SplashScreenActivity,測試將立即開始,並且如果視圖不在啓動屏幕上,則onView將失敗。 嘗試直接打開MainActivity,以測試該視圖。 我使用Espresso一段時間,我知道@Test方法在ActivityTestRule定義的活動加載完成時開始。

希望這有助於。

祝你好運!

+2

感謝您的諮詢! 我得到它的工作後,我宣佈規則爲 '假' 的第三個參數: '@rule公共ActivityTestRule mMainActivity =新ActivityTestRule <>(SplascreenActivity.class,真,假);' 這樣做,我可以像例如定義行爲。 'doNothing()時(mDeviceService).getDevices();' ,然後通過使用 'mSplashscreenActivity.launchActivity(空)手動啓動活動;'。 我也改變_Handler_與_AsyncTask_並知道測試工作如預期的包含等待,檢查等..... – grumpyshoe

+1

真的很棒!做得好! – sunlover3

+0

@grumpyshoe我也面臨同樣的問題,在我的應用程序中,我們有一個啓動畫面,可以自動將用戶導航到登錄屏幕,但我的測試不會等待導航到登錄並開始搜索用戶名輸入編輯文本。你能幫我麼。 – Krishnakant