2017-05-08 71 views
0

我的一個Espresso測試顯然失敗了,因爲之前測試觸發的廣播意圖正在通過後續測試的一部分。此時,應用程序處於不一致狀態,並且缺少意圖處理程序期望的一些SharedPreferences清除儀器測試之間的意圖

在開始Espresso測試之前,有沒有辦法確保所有等待的意圖已經處理或取消?

回答

0

我不認爲有一種方法可以清除已經分派的意圖。不過,您可以通過調整「之前的測試」來解決這個問題。

如果你想充分利用意式濃縮咖啡,你必須儘可能縮小你的測試範圍。因此,不要廣播一個意圖,並驗證接下來會發生什麼,試着扼殺你的意圖。

的使用IntentsTestRule代替ActivityTestRule和存根出使用下面的代碼,所有的內部意圖(有時甚至是外部的):

intending(isInternal()).respondWith(new Instrumentation.ActivityResult(Activity.RESULT_OK, null)); 

現在,在您的「以前的測試」,檢查是否正確的意圖越來越廣播使用類似:

intended(hasComponent("com.example.something.SomeActivity"));

這種方式,你可以不實際廣播任何意圖測試功能。我總是將我的內部和外部意圖存根並驗證在我的所有測試中是否觸發了正確的意圖。這樣下一個活動就不會啓動,我的Espresso測試更快更穩定。始終確保只測試你想測試的東西,並保持範圍非常小。

瞭解更多:https://google.github.io/android-testing-support-library/docs/espresso/intents/

+0

感謝,偉大的答案,看起來這將是真正有用的,如果我想更具體的測試意圖。但就我而言,意圖正在觸發UI元素的點擊處理程序。我不是試圖自己測試意圖,但他們反過來觸發UI更新。如果代碼可以更好地隔離,我會想一想。 – Armand

+0

即使在這種情況下,我建議你存根意圖。如果「廣播意圖」是「點擊處理程序」的副作用,則可以安全地對意圖進行存根並且仍然驗證您的UI更新。如果你的'廣播意圖'是導致UI更新的那個,你需要將測試分成兩部分。第一個測試案例:測試點擊「點擊處理程序」是否觸發了所需的意圖。第二個測試案例:使用「廣播意圖」啓動您的活動並檢查UI更新。 – Henry

相關問題