2011-06-07 116 views
44

我在製作Android應用程序方面有相當豐富的經驗。對於我的新項目,我們決定進行測試驅動開發(TDD)。我一直在Robotium用戶場景測試中弄溼我的手,並且它工作正常並且看起來也很容易。Android測試驅動開發

對於單元測試,我嘗試使用(MockContext Android Class)來模擬Context,但我無法這樣做。我通過這個博客http://sites.google.com/site/androiddevtesting/,並通過這個http://sdudzin.blogspot.com/2011/01/easy-unit-testing-for-android.html,這表明嘲笑Android應用程序仍然非常有限和困難,並建議使用PowerMock,jMockit,JeasyTest或Roboelectric(與Mockito和Maven結合)甚至RoboGuice。

我想從你們那裏得到你認爲哪個單元測試框架最適合測試Android應用程序的建議。 (特別是測試Android類,可能會給出模擬上下文和其他模擬功能,以便儘可能使測試用例儘可能獨立)。任何建議或指針都會有所幫助。由於

+1

參見[用於TDD資源在Android上](http://stackoverflow.com/questions/2336488/resources-for-tdd-on-android) – rds 2012-12-04 14:23:15

+1

另請參見[單元測試Android應用程序的最佳做法](http://stackoverflow.com/questions/522312/best-practices-for-unit-testing-android-apps) – rds 2012-12-04 14:30:04

回答

30

對於關閉元件測試,看看Robolectric

有關設備的測試,看看Borachio

底線:它仍然是非常,非常困難做好。事情正在改善(今天的情況比6個月前好得多),但Android是我曾經編寫程序的最具測試敵對性的環境。

+3

Borachito已棄用。 [Mockito現在有Android支持](http://www.paulbutcher。com/2012/05/mockito-on-android-step-by-step /) – rds 2012-12-04 10:55:59

+3

9個月後,對此有何更新? – 2013-03-14 11:29:54

+0

對Espresso有何建議? – 2013-11-01 15:53:05

4
  • 我在TDD(或BDD)的Activities中使用ActivityInstrumentationTestCase2,併爲所有邏輯編寫正常的單元測試。這也有助於我將邏輯與活動分開。
  • 自然界的移動應用程序是以用戶界面爲中心的。因此,即使它使得單元測試看起來像功能測試 一樣,但它並不是 可以模擬出UI。
  • 要添加附加意圖,您可以設置測試的自定義意圖,或通過覆蓋設置爲所有測試設置。
  • Mock在Android上給了很多問題,所以我使用存根。

一個例子如下。該活動顯示的Hello World當你點擊一個按鈕 -

public class HelloWorldActivityTest extends 
     ActivityInstrumentationTestCase2<HelloWorldActivity> { 

    private HelloWorld activity; 

    public HelloWorldActivityTest() { 
     super(HelloWorldActivityTest.class); 
    } 

    public void testShouldRenderGreetingOnButtonClick() { 
     activity = this.getActivity(); 
     Button button = (Button) activity.findViewById(R.id.btn_greet); 
     TouchUtils.clickView(this, button); 
     assertEquals("Hello World!", 
       ((TextView) activity.findViewById(android.R.id.greeting_text)) 
         .getText()); 
    } 

} 

編輯:因爲我張貼的答案事情已經改變了。 Mockito現在對Android有相當不錯的支持。對於測試,我們已經從ActivityInstrumentationTestCase2移動到Robolectric,僅僅是爲了在開發階段挖掘JVM的速度。 Android測試框架非常適合集成和功能測試,不適用於單元測試。

17

要做到TDD在Android中,我個人使用以下所有條件:

另外:使用依賴注入庫(如DaggerRoboguice)將大大簡化您的設備/集成測試。要在多個設備上運行測試,請考慮使用Spoon

+5

在我看來,我們不應該把Robotium - 儀器測試作爲TDD的一部分。 TDD的核心規則之一是測試應在幾秒鐘內提供反饋。
我同意Robotium/Espresso等測試也很重要,但在TDD Red-Green-Refactor過程中不可能使用它。 – 2014-05-12 07:47:07

+0

謝謝你的這些鏈接,但FEST-android消失了:現在有https://github.com/square/assertj-android這是一個Fest Assert的分支 – vallllll 2015-02-12 19:12:02

+0

@vallllll謝謝,更新了鏈接 – Nima 2015-03-17 19:33:51