studio-logo

要從 Eclipse 移往 Android Studio 開發 Android App,
另外一個要打通的關節就是 Testing,
原本在 ant + Eclipse 的工作環境中,
我是使用 Robolectric 與 Robotium 來進行 unit test 與 functional test 的,
所以如何讓他們能在 Android Studio 與 Gradle 的環境運作,
是必需且重要的。

在查找資料的過程中,
我發現 Android Studio 與  Robolectric 與 Robotium 的整合在稍早的版本並不是很好,
幸好,
在最新的版本要好得多了!
我有在 Android Studio 1.1 與 1.2 上嘗試,
是可以正常執行的。

網路上有一些文章同樣討論這個議題:
例如:
1. https://benwilcock.wordpress.com/2015/01/20/working-with-robolectric-and-robotium-in-android-studio-and-gradle/
https://www.bignerdranch.com/blog/triumph-android-studio-1-2-sneaks-in-full-testing-support/
3. https://www.bignerdranch.com/blog/all-in-together-android-studio-gradle-and-robolectric/
4. http://tools.android.com/tech-docs/unit-testing-support

我綜合了查找的資料,
以下是我的設定步驟。

1. 在 Android Studio 新建/匯入 Android 專案,它的檔案架構大致如下:

2015-05-01 09:28:11 +00001 

2. 編輯 build.gradle 的 dependencies,其中 androidTestCompile 跟 robotium 有關, testCompile 則跟 robolectric 有關。

dependencies {
androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.3.1'

testCompile "junit:junit:4.10"
testCompile "org.assertj:assertj-core:1.7.0"
testCompile "org.robolectric:robolectric:3.0-SNAPSHOT"
}

3.  對了, com.android.tools.build:gradle 的版本要 1.1.0 + ,另外 repositories 要加以下設定才拉得到 robolectric:3.0-SNAPSHOT

repositories {
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}

4. 在 Android Studo 1.1 要啟動 Enalbe Unit Test Support,在 1.2 好像已經是正式功能不用啟用了。

gradleExp

5. 在 src 的目錄下建立 test/java 目錄,在這個目錄下建立基於 robolectric 的 unit test,如何寫 robolectric 測試可參考 http://robolectric.org/

6. 在 src 的目錄下建立 androidTest/java 目錄,在這個目錄下建立基於 robotium 的 test,如何寫 robotium 測試可參考 https://code.google.com/p/robotium/

7. 由於個人覺得 test 跟 androidTest 這兩個目錄跟目的很容易混淆,所以我在 build.gradle 的 android 設定區塊增加以下設定

sourceSets {
test.setRoot('src/robolectric')
androidTest.setRoot('src/robotium')
}

8. 這樣子,我就可把 test 跟 androidTest 的目錄改成 robolectric 跟 robotium

2015-05-01 09:49:58 +00001

9. 如果要執行 robotium 測試,要點開 Build Variants 的設定,並選擇 Android Instrumentation Tests。

2015-05-01 09:52:07 +00001

10. 然後就可以在 robotium 的測試程式,點右鍵選單中的 Run ‘xxxxTest’ 執行 robotium 測試,當然在執行之前你要有 emulator 或實體機器連結。

2015-05-01 09:53:31 +00001

11. 如果要執行 robolectric 測試,則需要先在 Build Variants 選 Unit Tests

2015-05-01 09:53:06 +00001

12. 然後就可以在 robolectric 的測試程式,點右鍵選單中的 Run ‘xxxxTest’ 執行 robolectric 測試

2015-05-01 09:52:37 +00001

13. 要注意的是,有時候 robolectric 會執行失敗,根據官網說明 Mac 使用者,需要在 Run-> Edit Configurations 在 執行設定中將 Working directory 設成 $MODULE_DIR$

2015-05-01 10:02:13 +00001

14. 執行時,可以 Run 視窗看到測試狀態

2015-05-01 10:05:11 +00001

14. robolectric 的 report 可以在 build/reports/ 下找到,robotium 則可以在 build/outputs/androidTests 下找到,大致長得如下

2015-05-01 10:06:26 +00001

15. 如果我們不想透過 Android Studio 執行測試,也可以在 terminal 的專案目錄下以下指令

a) 執行 robolectric unit test

./gradlew test 

b) 執行 robotium test

./gradlew connectedAndroidTest

我的測試專案,若有興趣參考的朋友可以到此 https://github.com/ddsakura/android-gradle-example

若有寫錯或需要補充的也歡迎跟我說喔 :) 

 

arrow
arrow
    全站熱搜

    賽拉維‧柯南 發表在 痞客邦 留言(0) 人氣()