我有一個LoginActivity
,它在onResume()
中加載了一個SplashFragment
。如何模擬自定義ImageView進行活動單元測試
飛濺片段的佈局XML包含一個名爲RotatingImageView
的自定義ImageView
,顧名思義,它一開始將源圖像連接到窗口就開始旋轉。
現在,當我嘗試使用ActivityInstrumentationTestCase2<LoginActivity>
編寫LoginActivity
的單元測試時,會出現問題。我試圖在真實設備上運行測試(無根),而不是仿真器。
getActivity()
調用啓動活動,但由於旋轉圖像視圖(這是一個動畫順便說一句),咖啡卡住了。我知道濃縮咖啡不喜歡那裏的動畫。我得到的例外
「咖啡不能在45秒內啓動的意圖。也許在合理的時間量內的主要 線程一直沒有去閒?有 可能是一個動畫或東西不斷地重繪屏幕。 或者該活動正在進行創建時的網絡調用?請參閱線程轉儲 日誌。爲便於參考,上次事件隊列在 之前處於空閒狀態,則您的活動啓動請求爲1487296262885,現在最後一次爲 隊列已空閒爲:1487296262885如果這些號碼相同 您的活動可能會佔用事件隊列......「
現在顯然問題是以某種方式停止/模擬動畫。
我已經禁用的設備全部動畫選項 - >設置 - >開發人員選項,但仍活動時我看到的圖像旋轉啓動所以這並不能幫助。
我也研究過Disable animations for Espresso tests但這對我也沒有太大的幫助。無論如何,我本來可以做錯,但這並沒有幫助。
另一種選擇是使用特殊意圖啓動
LoginActivity
,該意圖告訴活動它正在測試中啓動,因此當您加載片段時會禁用動畫。這種方法可行,但並不理想,因爲它涉及在純粹用於測試的主類中添加代碼。其他
一種解決方案可能是嘲笑RotatingImageView
它它開始加載之前注入SplashFragment
。我會嘲笑startSpinningAnimation
的調用,所以當它加載到窗口中時,它不會啓動動畫。
我的問題是:這可能嗎?我可以在打電話給getActivity()
之前以某種方式模擬並將此自定義imageView
注入到我的片段中嗎?
謝謝。這工作。我將動畫邏輯從「CustomImageView」中分離出來。該片段將從「MyApplication」中獲得此實例。在測試中,我可以在啓動測試活動之前在'MyApplication'實例中注入一個模擬實例。作品! – kdas