Android - 單元測試

姜家志發表於2017-04-08

Android的單元測試有兩種方式:本地單元測試裝置單元測試本地單元測試可以直接執行在本地機器上面的Java Virtual Machine(JVM)。它的特點是執行時間短,執行效率高,但是沒有Android framework的支援,每個檔案都可以進行單獨的單元測試。
而在Android裝置上的單元測試,執行的是一個單獨的APK,直接執行到虛擬機器或者物理Android裝置上,這種單元測試擁有整個App的生命週期和執行環境。
這裡主要介紹以執行在Android裝置上的單元測試為主。

單元測試檔案在哪裡?

首先先看下單元測試檔案是什麼位置,下面是一個Android專案的基本結構:

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資料夾上面,可以看到執行單元測試的按鈕,如圖所示:

Android - 單元測試
Run all tests

直接點選Run all tests,可以看到單元測試的結果:
Android - 單元測試
測試結果

這樣就完成了一個簡單的單元測試。

原始碼地址:github.com/jjz/android…

相關文章