我有幾個簡單的測試,如assertNotNull(mActivity);
(我正在閱讀M.D.Torres的「Android應用程序測試指南」)。被測活動運行良好。每一個測試都可以運行。但是,如果我在第二次測試一次運行幾次測試永遠不會返回。 logcat中沒有錯誤(最後一行「Starting Intent ...」),沒有任何錯誤。調試也沒有多大幫助,如果我步入getActivity()
,它會抱怨沒有可用的源代碼。
另一個測試項目 - Google的ActivityTesting運行正常,即使有幾個測試,所以Eclipse的配置是正確的。
有沒有人遇到類似的東西?第二次測試getActivity()永不返回
回答
我再次重新創建測試項目(如「潔淨室」),它工作。然後我比較了兩個項目並找到了罪魁禍首。這是空的拆解:
protected void tearDown() throws Exception {
}
如果我刪除它,所有測試運行綠色。如果我粘貼它,第二個測試掛起。現在我想閱讀解釋並準備好將其標記爲答案。
編輯:我應該在tearDown
方法的結尾呼叫super.tearDown()
。 抱歉打擾大家。
我使用了ActivityInstrumentationTestCase2來測試一個使用ExoPlayer的Activity並且正確地清理資源。由於所有測試的清理和最終檢查都是相同的,我認爲tearDown()是實現它們的好地方。所有測試單獨運行沒有任何問題,但是當我運行多個測試時,有時getActivity()沒有返回。我拆解()來實現不同的東西:活動
- 檢查狀態(各種斷言()調用)播放器的
- 檢查狀態(各種斷言()調用)
- 手動清理的球員資源(通過調用close ()和release())
- setActivity(空)(這引起了麻煩)
- super.tearDown()
我嘗試了所有建議的解決方法比如重寫getActivity()並使用其他方法來創建和清理活動。這些方法沒有幫助。
大量的調試顯示,在上述情況下,先前測試活動的onDestory()可以與下一個測試活動的onCreate()重疊。因此,日誌顯示順序的生命週期事件:
test1.getActivity();
test1.tearDown() called;
test1.tearDown() over;
test2.getActivity()
test2.onCreate();
test1.onStop(); --> why is this late?
test1.onDestroy(); --> why is this late?
test2.tearDown() called;
test2.tearDown() over;
test3.getActiviy() --> this should call test3.onCreate, but did not and never returned.
發生這種情況即使在測試案例在不同的ActivityInstrumentationTestCase2類/文件的貫徹落實。第一次重疊並不會造成麻煩,所以2次測試總是OK,但以任何次序運行3次測試會導致此重疊,導致第3次調用getActivity()永遠不會返回。
我嘗試了所有的方法,例如手動使用工具調用onPause()+ onStop()+ onDestroy(),在測試之間引入非常長的睡眠時間,強制清除instrumentationTestCase的活動,重新排序tearDown的檢查,但沒有任何幫助。最後,我不小心刪除我的支票之前setActivity(空),以及生命週期事件得到正確排序:
test1.tearDown() called;
test1.onStop();
test1.onDestroy();
test1.tearDown() over;
test2.getActivity()
test2.onCreate();
...
所以真正讓我的情況的區別:不調用ActivityTestCase.setActivity()。這導致super.tearDown()不直接調用活動的生命週期事件,清理將在以後發生並造成麻煩。
- 1. Android單元測試:ActivityMonitor waitForActivityWithTimeout返回NULL,getActivity永不返回,INJECT_EVENTS權限錯誤
- 2. 的JUnit測試啓動... getActivity不返回
- 3. getActivity()返回null - 第二次打開片段
- 4. Rspec僅在第二次測試運行後才返回結果
- 5. Robotium在第二次測試
- 6. Google Maps API - GDirections.getDuration()第一次返回null,第二次返回
- 7. Android ActivityMonitor失敗導致getActivity()永遠不會返回
- 8. python:測試GPSd插座(2947)永遠不能連接第二次+時間
- 9. Robotium:第二次測試沒有啓動
- 10. JavaScript HtmlCollection循環永遠不會返回第二個元素
- 11. 第二次硒測試在第一次測試完成之前開始
- 12. Python:writelines()第二次調用返回空
- 13. XmlReader.create()在第二次後返回無
- 14. 的BufferedReader返回null第二次使用
- 15. 第二次調用strtok()返回null
- 16. 第二次嘗試?
- 17. 片段getActivity()在Activity JUnit測試中返回null
- 18. 第一次嘲諷然後返回第二次電話返回值
- 19. CGDataProvider第一次工作,第二次返回空圖像
- 20. 調用perror()第一次成功,第二次返回ILLEGAL SEEK?
- 21. 返回一個對象返回undefined在第二次迭代
- 22. Morphia Query在第二次搜索時返回Null,而不是第一次?
- 23. iOS:選擇選項返回null第一次,而不是第二次
- 24. 第一次返回false後不要調用第二次點擊事件
- 25. getActivity從片段返回null
- 26. getLocalActivityManager()。getActivity(tabTag)返回NULL
- 27. NestedFragment onActivityResult返回getActivity()Null
- 28. getActivity()在PreferenceFragment中返回null
- 29. 片段getActivity()返回null
- 30. 當getActivity()可以返回null?
真棒,謝謝。 – 2012-03-06 19:56:44
你不是唯一一個。謝謝! – iewnait 2012-12-03 22:58:51
我也有這個問題,所以你不會因爲問問題而煩擾任何人。我非常感謝您在解決方案中添加的內容! – jwir3 2014-01-29 18:59:24