Android的單元測試有兩種方式:本地單元測試
和設備單元測試
,本地單元測試
能夠直接運行在本地機器上面的Java Virtual Machine(JVM)
。它的特色是運行時間短,執行效率高,可是沒有Android framework的支持,每一個文件均可以進行單獨的單元測試。
而在Android設備上的單元測試,運行的是一個單獨的APK,直接運行到虛擬機或者物理Android設備上,這種單元測試擁有整個App的生命週期和運行環境。
這裏主要介紹以運行在Android設備上的單元測試爲主。javascript
首先先看下單元測試文件是什麼位置,下面是一個Android項目的基本結構:
java
其中:android
../app/src/test/java
目錄下是本地單元測試的文件目錄。../app/src/androidTest/java
目錄下就是設備單元測試的文件目錄。知道了單元測試文件的目錄,下面就看下如何配置單元測試環境。git
須要使用單元測試,須要引入單元測試的依賴庫,在AndroidManifest.xml
裏面添加uses-library:github
<application
.....
<uses-library android:name="android.test.runner"/>
</application>複製代碼
而後再配置單元測試框架的啓動項:app
<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
開頭。
編寫完單元測試以後,就能夠運行了。ui
在../app/androidTest/java
文件夾上面,能夠看到運行單元測試的按鈕,如圖所示:
Run all tests
,能夠看到單元測試的結果:
源代碼地址:github.com/jjz/android…