本文將說明如何在 Compose 中使用 waitUntil 測試 API,等待特定條件達成。在某些情況下,這是使用閒置資源的絕佳替代方案。
[2023 年更新] 摘要:在 Compose 測試 (1.4.0 以上版本) 中,請使用新的 waitUntil API 進行同步處理。
什麼是同步?
測試可依範圍分類。小型測試或單元測試著重於應用程式的小部分,而大型測試或端對端測試則涵蓋應用程式的大部分。如要瞭解這類和其他類型的測試,請參閱最新版測試文件。
按下 Enter 鍵或按一下即可查看原尺寸圖片
同步機制可讓測試瞭解何時執行下一個作業。您選擇驗證的程式碼區塊越大,就越難與測試同步。在單元測試中,您可以輕鬆全面掌控程式碼的執行情況,以便進行驗證。不過,隨著範圍擴大,納入更多類別、模組和層級,測試架構就難以判斷應用程式是否正在執行作業。
按下 Enter 鍵或按一下即可查看原尺寸圖片
androidx.test 和 Compose 測試 (延伸功能) 在幕後使用一些技巧,因此您不必太擔心這類問題。舉例來說,如果主執行緒忙碌中,測試會暫停,直到可以執行下一行程式碼為止。
但他們無法得知所有資訊。舉例來說,如果您在背景執行緒中載入資料,測試架構可能會過早執行下一個作業,導致測試失敗。最糟糕的情況是只有一小部分時間會發生這種情況,導致測試不穩定。
選項 1:閒置資源
閒置資源是 Espresso 功能,可讓開發人員決定應用程式何時處於忙碌狀態。使用方式有兩種:
1. 將其安裝在測試無法查看的工作架構或程式庫中。
RxIdler 就是一個很好的例子,這個類別會包裝 RxJava 排程器。建議您採用這種方式註冊閒置資源,因為這樣可以將測試設定與測試程式碼清楚分開。
2. 修改受測程式碼,明確公開應用程式是否忙碌的相關資訊。
舉例來說,您可以修改存放區 (或測試替身),指出從資料來源載入資料時忙碌:
這並非理想做法,因為您會汙染正式版程式碼或建立複雜的測試替身,而且在某些情況下,這些替身難以安裝。舉例來說,您會在 Kotlin Flow 中如何使用閒置資源?哪一則更新是最後一則?
相反地,我們可以等待。
選項 2:等待項目…錯誤的方式
載入資料通常很快,尤其是使用虛擬資料時,因此何必浪費時間讓資源閒置,只要讓測試休眠幾秒鐘即可。
這項測試執行速度會比必要速度慢,或會失敗。如果您有數百或數千項 UI 測試,一定希望測試能盡快完成。
此外,模擬器或裝置有時會發生錯誤和卡頓,導致作業時間超過 2000 毫秒,進而中斷建構作業。當您有數百項測試時,這會成為一個大問題。
選項 3:以正確方式等待!
如果不想修改測試中的程式碼,以顯示程式碼忙碌的時間,可以等待特定條件達成,而不是等待任意時間。
在 Compose 中,您可以運用 waitUntil 函式,該函式會採用產生布林值的另一個函式。
2023 年 3 月 22 日更新:我們在 Compose 1.4.0 中新增了一組 waitUntil API:
[1.4.0 之前的版本:請使用這些輔助程式:waitUntilExists、waitUntilNodeCount]
…並像這樣使用:
只有在需要將測試與 UI 同步處理時,才使用這些 API。在每個測試陳述式上同步處理,會不必要地汙染測試程式碼,導致維護更加困難。
那麼何時該使用呢?從可觀察物件 (使用 LiveData、Kotlin Flow 或 RxJava) 載入資料時,就很適合使用這個方法。如果 UI 需要接收多項更新,您才會將其視為閒置,不妨使用 waitUntil 簡化同步作業。
舉例來說,從檢視畫面收集 Flow 時:
並向其中發出多個項目:
如果 repository 需要一段不確定的時間才能傳回第一個結果,測試架構會將「Loading」視為閒置狀態 (在 collectAsState 中指派的初始值),並繼續執行下一個陳述式。
因此,如果確保 UI 未顯示載入指標,測試的可靠性就會大幅提升:
預祝測試愉快!
程式碼片段授權:
Copyright 2022 Google LLC. SPDX-License-Identifier: Apache-2.0
繼續閱讀
-
操作說明
在這篇文章中,我們將深入探討更具視覺吸引力的內容,也就是在攝影機預覽畫面中實作聚光燈效果,並以臉部偵測做為效果的基礎。
Jolanda Verhoef • 閱讀時間:8 分鐘
-
操作說明
無論您是使用 Android Studio 內建 Gemini、Gemini CLI、Antigravity,還是 Claude Code 或 Codex 等第三方代理程式,我們的目標都是確保您隨時隨地都能進行高品質的 Android 開發作業。
Adarsh Fernando, Esteban de la Canal • 4 分鐘可讀完
-
操作說明
Google 瞭解 Android 使用者最重視電池耗電,因此採取重大措施,協助開發人員打造更省電的應用程式。
Alice Yuan • 閱讀時間:8 分鐘
隨時掌握最新消息
每週透過電子郵件接收最新的 Android 開發洞察資料。