13

1)所有正在測試的設備/模擬器都禁用了動畫。片狀安卓咖啡測試 - 小吃店

2)我有一個@BeforeClass構建我的憑證對象。

3)我有一個IntenServiceIdlingResource和一個EventBusIdlingResource,註冊在@Before中。

4)當點擊登錄按鈕時,IntentService會關閉。在這種情況下,服務器(模擬服務器)返回500錯誤。該信息通過綠色機器人的EventBus從IntentService回發到UI,並顯示一個Snackbar和錯誤消息。

下面是測試代碼:

@Test 
public void a_userNamePasswordTest() throws Exception { 
    // email input 
    ViewInteraction userNameView = onView(withId(R.id.email)); 

    // verify it's on screen and enabled 
    userNameView.check(matches(isDisplayed())).check(matches(isEnabled())); 

    // set the username 
    userNameView.perform(scrollTo(), replaceText(credentials.username), closeSoftKeyboard()); 

    // password input 
    ViewInteraction passwordView = onView(withId(R.id.password)); 

    // verify it's on screen and enabled 
    passwordView.check(matches(isDisplayed())).check(matches(isEnabled())); 

    // set the password. 
    passwordView.perform(scrollTo(), replaceText(credentials.password), closeSoftKeyboard()); 

    // sign in button 
    ViewInteraction signInButton = onView(withId(R.id.email_sign_in_button)); 

    // verify the button 
    signInButton.check(matches(allOf(
      isDisplayed(), isEnabled(), withText("Sign In"), withContentDescription("Sign In") 
    ))); 

    // clickity click the button 
    signInButton.perform(scrollTo(), click()); 

    // verify the snackbar text 
    onView(withText(startsWith("Server Error: 500"))).check(matches(isDisplayed())); 

} 

這是例外,我通常會得到:

SignInExceptionTest > a_userNamePasswordTest[Nexus_6P_API_23(AVD) - 6.0] FAILED android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with text: a string starting with "Server Error: 500"

根據我的記錄,我的空轉資源工作。但查看日誌的時間戳,異常發生在空閒資源閒置約5秒後。

似乎資源閒置時以及嘗試查找視圖之間存在延遲。

其他可能的相關細節:

  • minSdk:20
  • 編譯& targetSdk:25
  • 編譯工具:25.0.2
  • 支持庫:25.1.1
  • 咖啡核:2.2.2
  • gradle插件2.3.0-beta3

我該如何修復這個測試,使它不是片狀,除了膨脹多長時間我的小吃店顯示?

回答

12

Espresso在IdlingResource變爲活動狀態之後強制執行5秒等待,然後再次檢查是否空閒。

這對我而言有2個負面影響。

首先,它增加了運行測試需要多長時間。每個測試中額外的5秒(或5的倍數)可以真正加起來。第二,由於快餐欄立即顯示,並且只顯示約3.5秒,幾乎任何時候您在等待IdlingResource,在Espresso意識到資源閒置之前快餐欄將會消失,這使得它很難去測試。

ConditionWatcher,描述如下: https://medium.com/azimolabs/wait-for-it-idlingresource-and-conditionwatcher-602055f32356#.9rms52osh

和代碼在這裏: https://github.com/AzimoLabs/ConditionWatcher

提供了一個解決這兩個問題。而不是5秒,它默認爲250ms,並且可以調整該值(setWatchInterval)。

+0

謝謝。 Espresso對IdlingResource的依賴正在推動着我的香蕉。沒有很好的理由將測試框架代碼投入到我的類中,而這正是應該如何正確完成的。 我仍然不能相信Espresso已經沒有這樣的東西了! –