我的理解是,Android儀器化JUnit測試在自己的線程上運行,除非用@UiThread
註釋或調用Instrumentation.runOnMainSync()
或Activity.runOnUiThread()
。現在我試圖使用CursorLoader
來訪問我的應用程序的數據庫並填充ListView
。我也有一個測試,驗證ListView
正確填充。同步測試線程,UI線程和CursorLoader線程
我的問題是,我需要同步三個線程:測試線程應該等到CursorLoader
線程完成並通知UI線程填充ListView
。要創建一個CursorLoader
,我在的支持下注冊LoaderCallbacks
,並在onCreateLoader()
中創建實例。然後onLoadFinished()
更改ListView
的適配器的光標。
現在我需要確保在嘗試訪問ListView
的子視圖之前,我的測試一直等到onLoadFinish()
被調用。我目前的想法是添加一個waitForData()
方法到我的LoaderCallbacks
實現,測試可以調用。但是,我不確定如何實現這種方法。我可以簡單地使用wait()
然後notifyAll()
在onLoadFinished()
?或者我需要使用更復雜的東西,比如Semaphore
?
感謝您回答我的問題。對不起,我沒有早點回復。我有一個問題:什麼是'SessionStatus'? –
@ Code-Apprentice如果我記得,它只是android API的一部分。測試的唯一相關位是使用「服務員」,它允許您的測試等待,直到您準備好恢復,這可能是在收到一些回調之後。 – Jonathan
使用Google搜索「android SessionStatus」不會對Android API文檔造成衝擊,所以我得出結論,這是自定義類,無論這個例子來自哪裏。我也不確定如何將它融入到我現有的應用程序和測試框架中。 'SessionListener'是否與應用程序代碼一起或與測試一起使用? 「服務員」在哪裏申報?我在哪裏可以調用'waiter.await()'?你能提供一個更完整的例子嗎? –