Android的單元測試有兩種方式:本地單元測試
和裝置單元測試
,本地單元測試
可以直接執行在本地機器上面的Java Virtual Machine(JVM)上面。它的特點是執行時間短,執行效率高,但是不依賴Android framework,每個檔案都可以進行單獨的測試。
執行在裝置上的單元測試,執行的是一個單獨的APK,直接執行到虛擬機器或者裝置上,這種單元測試擁有整個App的生命週期和執行環境。
這裡主要介紹執行裝置上的單元測試為主。
測試檔案在哪?
下面是一個Android專案的基本結構:
其中../app/src/test/java
目錄下是本地單元測試的檔案目錄。
../app/src/androidTest/java
目錄下就是裝置單元測試的檔案目錄。
配置測試環境
首先需要引入單元測試的依賴庫,在AndroidManifest.xml
裡面新增uses-library:
1 2 3 4 |
<application ..... <uses-library android:name="android.test.runner"/> </application> |
配置單元測試框架的啟動項:
1 2 3 4 5 6 7 8 |
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.jjz"> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.jjz" android:label="test"/> </manifest> |
android.test.InstrumentationTestRunner
是Android單元測試其中的一個啟動項,用來啟動單元測試。
com.android.test.runner.MultiDexTestRunner
是另一個單元測試的啟動項用來啟動MultiDex
的專案。
設定android:targetPackage
與專案的package
相同,這樣當前單元測試的執行和應用程式是在一個程式裡面。
編寫測試程式碼
在專案中增加一個方法用來比較兩個字串的是否相等,在對該方法進行做單元測試:
1 2 3 4 5 6 7 8 9 10 |
public class StringUtil { public static boolean compare(String source, String other) { if (source == null) { return other == null; } else { return source.equals(other); } } } |
增加方法compare
的單元測試程式碼,在../app/src/androidTest/java/com.jjz
新增檔案StringUtilTest.java
。
1 2 3 4 5 6 7 |
public class StringUtilTest extends AndroidTestCase { public void testCompare() { Assert.assertFalse(StringUtil.compare(null,"123")); Assert.assertTrue(StringUtil.compare("123","123")); } } |
需要注意的是類名必須使用Test
結尾,需要繼承AndroidTestCase
,單元測試的方法需要使用test
開頭。
執行
在../app/androidTest/java
資料夾上面,可以看到執行單元測試的按鈕:
直接點選Run all tests
,可以看到執行單元測試的結果:
原始碼地址:https://github.com/jjz/android/tree/master/experimental