2013-02-19 150 views
44

想知道爲Android應用程序和庫編寫單元測試用例的更好選擇:使用Robolectric庫還是堅持使用Android測試框架。我想在命令行中運行測試套件,並且希望它獨立於配置模擬器的需要,或者讓設備附帶構建機器。你們中的任何一個人都對這些或者更好的東西進行了比較分析?您的經驗將幫助我決定更好的解決方案。Android單元測試用例自動化:Robolectric庫與Android測試框架

+1

這個問題很舊。正如我現在閱讀[文檔](https://developer.android.com/training/testing/index.html),似乎Android測試框架是要走的路。這些不是命令行,但對於剛開始的人來說,[這裏是一些例子](http://stackoverflow.com/a/43626962/3681880)。 – Suragch 2017-04-26 07:27:12

回答

93

我用一個分層系統,在這裏我更喜歡較早層在可能的情況:

  1. 純單元測試。我嘗試儘可能地使代碼儘可能獨立於Android API,然後使用可在任何JVM上運行的「純」單元測試。這些測試是最快的,它有助於保持代碼不需要是特定於Android的便攜式應用程序。
  2. Robolectric支持的單元測試。在我的代碼對Android API只有很小的依賴性的情況下,Robolectric陰影可以滿足這一點,我使用Robolectric進行測試。與純粹的測試相比,Robolectric有更多的設置時間,但它比在模擬器上啓動/運行還要快。
  3. Android框架測試。 Robolectric沒有削減它 - 要麼是因爲陰影不存在,要麼是因爲我大量使用Android API(因此想要測試真實的東西) - 我編寫的測試在仿真器/設備上運行默認框架。

層次的要點是儘可能簡化事情,這樣可以使整個套件更快,並且有助於促進更乾淨的代碼。

+1

您是否創建了多個專用測試項目tom實現層? – bianca 2013-02-24 01:47:53

+1

我只用了兩個項目:一個用於兩種類型的單元測試(純和Robotium),另一個用於框架測試。 – 2013-02-24 09:52:44

+0

再次感謝!你使用任何代碼覆蓋工具? – bianca 2013-02-25 17:29:07

5

我曾在這兩個,我發現了什麼是: -

1)Robolectric不支持API 19,這是它的文件中提到 - http://robolectric.org/eclipse-quick-start/。這是一個很好的缺點。

2)Robolectric在JVM上運行,不在DVM上。所以我們不能 檢測到,在該特定時間GPS是否啓用設備或不 等。我們只能通過我們的預先決定的價值。

3)Robolectric中的代碼編寫比junit複雜,特別是對於 片段存在很多複雜性和問題。

4)Robolectric需要外部罐和配置,並且對於junit測試 我們不需要任何外部庫。 5)Robolectric運行速度更快,因爲它運行在JVM上,但這也有缺點,我們無法在設備上看到UI,屏幕代碼 正在執行。

對於Android,我喜歡jUnit測試。