Android單元測試一:單元測試入門

1. 前言

在Android開發中,如果對一個簡單的功能,每次修改代碼都重新運行到設備中進行測試,會浪費大量時間,降低開發工作效率。如果使用單元測試,編寫單元測試類,執行測試單元測試類就可以對某些功能進行測試,大大提升了開發工作效率。

2. 添加單元測試支持

在AndroidStudio項目中,如果是新版本的AndroidStudio中新建的,會自動添加了單元測試的支持,如果舊項目,沒有添加單元測試支持,需要手動進行配置。

2.1 添加單元測試依賴包

在程序模塊下面的build.gradle中需要引入的依賴包:
testImplementation ‘junit:junit:4.12’
androidTestImplementation ‘com.android.support.test?1.0.2’
androidTestImplementation ‘com.android.support.test.espresso:espresso-core:3.0.2’
testImplementation-引入的依賴是java unit單元測試,是運行在當前電腦的jvm上的單元測試;
androidTestImplementation-引入的依賴是Android單元測試,是運行在Android環境的單元測試。

2.2 添加測試代碼目錄

如果AndroidStudio當前項目視圖爲Android,需要切換爲Project視圖,在程序模塊下面的src目錄下添加androidTest/java(Android單元測試,運行在Android環境的單元測試)和test/java(JUnit單元測試,運行在當前電腦的jvm上的單元測試),然後在裏面添加包名和測試類。

在這裏插入圖片描述
androidTest/java(Android單元測試,運行在當前電腦的jvm上的單元測試,執行測試的時候需要Android連接設備,速度比較慢,適合需要調用Android api的單元測試)
test/java(JUnit單元測試,用來放不需要Android依賴的單元測試類,運行在當前電腦的jvm上的單元測試,速度快,適合只是對java代碼功能進行單元測試)

3 添加單元測試類

3.1 手動編寫單元測試類

3.1.1 androidTest測試類

androidTest測試類適用於需要依賴Android api的單元測試,需要連接Android設備才能進行測試。新建的androidTest java類需要添加@RunWith(AndroidJUnit4.class)註解,類的方法如果是測試入口方法需要添加@Test註解。
示例代碼:

package com.xiaoying.untitestdemo;
 
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.test.InstrumentationRegistry;
 
import org.junit.Before;
import org.junit.Test;
 
import static org.junit.Assert.assertEquals;
 
/**
 * Created by [email protected] on 2018/5/13.
 */
public class MainActivityTest {
 
    private Context mTargetContext;
 
    @Before
    public void setUp() throws Exception {
        mTargetContext = InstrumentationRegistry.getTargetContext();
    }
 
    @Test
    public void onCreate() {
        try {
            ApplicationInfo applicationInfo = mTargetContext.getPackageManager().getApplicationInfo(mTargetContext.getPackageName(), PackageManager.GET_META_DATA);
            Bundle metaData = applicationInfo.metaData;
            String data = metaData.getString("com.xiaoying.TEST");
 
            assertEquals("1234567890", data);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }
}

3.1.2 test測試類

test測試類適用於純java的單元測試,運行於當前設備的jvm環境中,無需Android設備即可測試。新建test java類,類的方法如果是測試入口方法需要添加@Test註解。
代碼示例:

package com.xiaoying.untitestdemo;
 
import org.junit.Before;
import org.junit.Test;
 
import static org.junit.Assert.*;
 
/**
 * Created by [email protected] on 2018/5/13.
 */
public class UtilsTest {
 
    @Before
    public void setUp() throws Exception {
 
    }
 
    @Test
    public void isEmpty() {
 
        assertEquals(true, Utils.isEmpty(""));
    }
}

3.1.3 測試類中的setUp方法

在測試類中的setUp方法,可以在啓動測試前進行一些初始化,比如測試類中的變量等初始化,這個方法需要添加@Before註解。

說明:
上面的示例代碼中可以直接使用assertEquals,是因爲使用了靜態import方法引入了相應的包(import static org.junit.Assert.*;)
根據測試的功能合理使用androidTest和test,提高單元測試效率。

3.2 自動生成測試類和測試方法

上面介紹的是手動添加測試類和測試方法,以下介紹自動生成測試類和方法。在項目源碼中選中需要添加單元測試的類並打開,在內容顯示區域“右鍵”->“Go To”,在彈出窗口中選擇“Test”,在彈出窗口中選擇“Create New Test …”
在這裏插入圖片描述
在接下來彈出的對話框中,勾選需要添加單元測試的方法,在這裏有個“Generate”通用方法生成,可以選擇setUp/@Before(啓動前調用,可用於初始化)和tearDown/@After(結束後調用)
在這裏插入圖片描述

4. 運行單元測試

4.1 運行單個測試方法

在測試方法題內部,“右鍵”,在彈出菜單中選擇“Run 方法名”即可(單元測試也可以使用斷點調試和性能調試)。
在這裏插入圖片描述

4.2 批量運行測試方法(有些情況下可能會無法實現)

在終端使用gradle運行test任務,可以執行所有的單元測試方法(在AndroidStudio的Terminal運行gradlew test,在系統終端中運行gradle -p 項目路徑 test,gradle沒有配置環境變量,需要絕對路徑),運行完成後,就會運行所有的單元測試方法,並且會顯示結果,如下圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章