Android的單元測試有兩種方式:本地單元測試
和裝置單元測試
,本地單元測試
可以直接執行在本地機器上面的Java Virtual Machine(JVM)
。它的特點是執行時間短,執行效率高,但是沒有Android framework的支援,每個檔案都可以進行單獨的單元測試。
而在Android裝置上的單元測試,執行的是一個單獨的APK,直接執行到虛擬機器或者物理Android裝置上,這種單元測試擁有整個App的生命週期和執行環境。
這裡主要介紹以執行在Android裝置上的單元測試為主。
單元測試檔案在哪裡?
首先先看下單元測試檔案是什麼位置,下面是一個Android專案的基本結構:
其中:
../app/src/test/java
目錄下是本地單元測試的檔案目錄。../app/src/androidTest/java
目錄下就是裝置單元測試的檔案目錄。
知道了單元測試檔案的目錄,下面就看下如何配置單元測試環境。
配置單元測試環境
需要使用單元測試,需要引入單元測試的依賴庫,在AndroidManifest.xml
裡面新增uses-library:
<application
.....
<uses-library android:name="android.test.runner"/>
</application>複製程式碼
然後再配置單元測試框架的啟動項:
<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
相同,這樣當前單元測試和應用程式會執行在同一個程式裡面。
環境配置完成之後,就可以編寫單元測試的程式碼了?
編寫單元測試
為了使用單元測試方便,先在專案中增加一個方法,該方法用來比較兩個字串的是否相等:
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
,檔案內容為:
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
,可以看到單元測試的結果:
這樣就完成了一個簡單的單元測試。
原始碼地址:github.com/jjz/android…