2010-08-26 63 views
3

我有大約400個單元測試,我已經爲我的Android應用程序編寫。如果我通過包運行測試包,一切工作正常,所有的測試通過。但是,如果我嘗試一次全部運行它們,最終(大約360次測試),Android開始吐出!!! Failed Binder Transaction Errors !!!。大約10-20次這些錯誤之後,我正在測試的應用程序的進程會被終止,單元測試甚至不會完成。大量的單元測試導致凍結失敗的粘合劑交易

我應該注意到,在此期間,Eclipse在控制檯中報告Collecting test information。我認爲這很奇怪,因爲它表明它正在運行測試,即使JUnit UI沒有反映出來。當一切正常時,在Collecting test information階段我看到測試運行,然後出現JUnit UI,然後再次運行所有測試(我通過讀取logcat知道這一點)。那是(我認爲)一個單獨的問題,但如果有人知道那是關於什麼的,我覺得我會提及它。

編輯爲2011年6月6日

按以下克里斯托弗的回答,我已經驗證了試圖通過Eclipse來運行這個時候這只是發生。如果我使用ANT運行我的測試套件,所有測試最終都會執行。

當我嘗試運行我的測試套件時,Eclipse基本上掛在「收集測試信息」上。我一直沒有讓它運行很長一段時間,但我會盡快嘗試,看看它是否完成。

+1

我們看到了同樣用大約500測試。你是否設法緩解這個問題呢? – 2011-03-17 09:35:56

+0

對不起,我還沒有想出一種方法來解決這個問題呢。也許有人在Android團隊有一些想法... – 2011-05-20 22:20:26

回答

3

我調查了一遍,據我所知,這純粹是Android Eclipse插件的問題。這個問題似乎是固定的,但有時還會發生(可能是機器相關的)。

正如你所提到的,Eclipse插件似乎運行兩次所有的測試。它實際上第一次做的是收集測試套件和測試名稱,以便它可以在該分層的JUnit UI中顯示所有測試名稱。

但是,「運行」這樣的測試似乎會導致問題。作爲Android SDK工具v8,a "workaround" was added的一部分,它在檢查每個測試之間放置15ms的延遲時間。這樣做是爲了防止「Binder事務失敗......對於大型測試套件」。

事實上,我回到了我的項目,「失敗的BINDER TRANSACTION」錯誤,我不能在命令行上重現它。我們也在Eclipse中嘗試過,並且它不能再被複制(儘管我們確信當我們最初看到這個時,我們有SDK Tools r8 +)。

但是,我仍然可以通常在Eclipse中重現它。嘗試從Eclipse的最新的Android工具再次運行測試,或嘗試過我創造了這個最小的GitHub庫,看看是否可以重現它:
https://github.com/orrc/android-large-test-failures#readme

+0

我編輯了我的問題與您的建議的結果。我用ANT運行我的測試套件(奇怪的是,我們剛剛切換到ANT),它的工作!我將嘗試在Eclipse中再次運行我的測試項目,以查看日誌貓在「收集測試信息」時所說的內容。另外,爲了清楚起見,我在設備和仿真器上都有這個錯誤。 – 2011-06-02 14:21:52

+0

好的。所以我的項目仍然肯定會在eclipse中拋出失敗的綁定器事務,但是這一次,它試圖收集測試信息而不是在第二次運行測試時..多麼奇怪.. – 2011-06-02 14:36:22

+0

爲了更進一步地更新這個工作,我想我已經縮小了這個問題。我很少會在Nexus S上發生這個問題。但是,在較慢的處理器(在我的情況下,HTC Aria)的舊手機上,我可以定期重現問題。我想這個電話的延遲是不夠的? – 2011-07-18 15:04:47

1

您可能想嘗試在本地JVM中運行測試,而不是將它們部署到模擬器或手機。查看Robolectric尋求幫助。

+0

雖然這可能會工作,但我更感興趣的是他們爲什麼不能在我的設備上工作。它對我來說很奇怪。 – 2011-05-20 22:20:59