Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android產品研發(十九)--)android studio中的單元測試

android產品研發(十九)--)android studio中的單元測試

編輯:關於Android編程

上一篇文章中我們講解了webview中問題集錦,講解了webview的性能優化、webview種入Cookie信息、activity退出的時候清除webview信息報錯、如何通過java代碼和js代碼相互交互、webview如何下載文件以及騰訊的X5浏覽服務等知識,這些都是我在使用webview中遇到的問題,難點,實踐等。

本文我們將講解如何在android studio中進行單元測試。在android開發項目中,經常會測試,而一次又一次的運行模擬器,不但慢,會需要大量時間,還會工作效率降低,重復做一些無用的操作,雖然最新的android studio中提供了instance run功能,來提高android studio的編譯速度,但是我們還是需要了解android studio的單元測試功能,其可以很方便的為我們提供功能性測試,所以如果項目中有用到測試數據的時候,可以先進行單元測試,如果可以正常輸出數據了,然後再到UI中執行,這樣會提高一些工作效率。

什麼是單元測試:

在講解如何在android studio中進行單元測試之前我們先普及一下基本知識,即什麼是單元測試,這裡我先引用一下百科中對單元測試的描述:

是指對軟件中的最小可測試單元進行檢查和驗證。對於單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語言中單元指一個函數,Java裡單元指一個類,圖形化的軟件中可以指一個窗口或一個菜單等。總的來說,單元就是人為規定的最小的被測功能模塊。單元測試是在軟件開發過程中要進行的最低級別的測試活動,軟件的獨立單元將在與程序的其他部分相隔離的情況下進行測試。

簡單來說單元測試就是將一個軟件功能拆分成N個最小的不可拆分的單元功能點,對著單元功能點的測試就是單元測試。

單元測試有什麼作用:

android中的測試一般分為:功能測試,ui測試,單元測試等等;
由於app運行需要android運行環境,而我們的android的單元測試一般無法提供運行環境,所以一般像功能測試,UI測試等都需要在模擬器或者是真機上進行,但是一些功能性的需求不需要android環境的功能,如果也使用android studio重新編譯運行,那麼耗費的時間就太長了,一般來說一個apk文件編譯,安裝,運行的時間一兩分鐘都是普遍的,三四分鐘也可能,這樣為了測試一個簡單的功能,就需要花費這麼長的時間重新編譯運行,性價比太低。

因此單元測試主要是功能測試,主要用於測試一些功能性的需求;比如網絡請求,比如數據存儲等等。

android studio對單元測試的支持:

新版的android studio中添加了對單元測試的支持;如圖所示:
這裡寫圖片描述

該目錄下編寫測試用例即可。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxzdHJvbmc+taXUqrLiytS/ydLUsuLK1MTH0KnE2sjdo788L3N0cm9uZz48L3A+DQo8cD7V4sDv0OjSqsu1w/e1xMrHYW5kcm9pZCBzdHVkaW+1xLWl1Kqy4srU08nT2ta7ysfEo8TiYW5kcm9pZL+qt6K7t76zo6y1q8rHxuSyu8rH1ebV/bXEYW5kcm9pZL+qt6K7t76zo6zL+dLUsrvE3LLiytRVSbmmxNyjrLK7xNyy4srU0OjSqtOyvP7Wp7PWtcS5psTco6ixyMjnwLbRwKOsd2lmabXIo6mjrLK7xNyy4srUQXBwzPjXqrXItcijrMTHw7TG5L/J0tSy4srUxMfQqcTayN3E2KO/PC9wPg0KPHA+suLK1NK70KnK/b7d0NS1xLmmxNyjrLHIyOe809TYzfjC58r9vt08L3A+DQo8cD6y4srUU2hhcmVkUGVyZmVyZW5jZXOjrLLiytTK/b7dv+KjrLLiytS6r8r9tcg8L3A+DQo8cD65pL7fwOC1xLLiytSjrLHIyOfR6dakyrG85KOs16q7r7jxyr2jrNX91PLR6daktci1yDwvcD4NCjxwPjxzdHJvbmc+vPK1pbXEtaXUqrLiytTTw8D9o7o8L3N0cm9uZz48L3A+DQo8cD7O0sPHwLS/tNK7z8Ky4srU08PA/bXE0LS3qKO6PC9wPg0KPHByZSBjbGFzcz0="brush:java;"> /** * Instrumentation test, which will execute on an Android device. * * @see Testing documentation */ @MediumTest @RunWith(AndroidJUnit4.class) public class ExampleInstrumentationTest { @Test public void useAppContext() throws Exception { // Context of the app under test. Context appContext = InstrumentationRegistry.getTargetContext(); assertEquals("uuch.com.android_activityanim", appContext.getPackageName()); } }

這是項目創建的默認的單元測試的類,可以看到其和普通的Class類無太多的區別,只是調用了相應的測試API而已,下面我們就自定義一個自己的單元測試類。

編寫自定義的測試用例類:

實現測試用例方法
/**
 * Created by aaron on 16/7/11.
 * 自定義的單元測試類
 */

@MediumTest
@RunWith(AndroidJUnit4.class)
public class MTest {

    @Test
    public void test1() {
        // Context of the app under test.
        Context appContext = InstrumentationRegistry.getTargetContext();
        assertEquals("uuch.com.android_activityanim", appContext.getPackageName());

        Log.i("tag", "$$$$$$$$$$$$");
        assertEquals("result:", 123, 100 + 33);
    }
}

需要注意的是

測試用例類需要使用注解:@MediumTest和@RunWith(AndroidJUnit4.class)

我們所寫的測試用例方法需要添加名稱為Test的注解,否則的話,就找不到測試方法。

比如我們去掉注解Test的話:
這裡寫圖片描述

再次執行的話,就找不到可執行的測試函數了。

還有一個問題,可以發現我們的函數都是這是的public的,如果我們設置我們的測試函數為private的貨怎麼樣呢?修改測試函數

/**
 * 單元測試,測試函數
 */
@Test
    private void test2() {
        Log.i("tag", "$$$$$$$$$$$$");
        assertEquals("result:", 123, 100 + 33);
    }

執行之後可以發現:
這裡寫圖片描述

報錯了,錯誤說明也很詳細,說的是我們的測試函數需要設置為Public的,所以我們在編寫測試函數的時候需要注意兩點:

測試函數需要為public

測試函數需要添加@Test注解

如何執行測試用例

直接在源碼中右鍵執行

編寫完成之後,如何運行呢?
這裡寫圖片描述

可以選中需要測試的方法名稱,然後右擊,彈出操作提示框,這是選擇run 方法名就可以了,這時候就可以執行該測試方法了。

測試用例裡面為我們提供了測試過程中可能需要的系統環境對象
這裡寫圖片描述

比如:application,context等等;以後我們再次編寫單元測試的時候是不是很方便了呢?

android studio菜單中執行測試用例

- 選擇run-edit configuration
這裡寫圖片描述

- 添加android tests用例
這裡寫圖片描述

- 配置tests方法
這裡寫圖片描述

點擊ok,這時候run區域就已經出現了我們剛剛添加的測試用例了
這裡寫圖片描述

一個簡單的單元測試小例子:

說了這麼多,我們還是舉一個實力的開發例子吧。

情景
有這樣的一種情況,我們在開發過程中需要使用正則表達式驗證一個字符串,但是我們想在重新編譯Apk之前驗證一下這個正則表達式,直接運行項目也可以打,但是太慢了,有什麼簡單的方式能夠驗證呢?這時候就可以使用我們的單元測試了。

編碼

/**
 * 單元測試,測試函數
 */
@Test
    public void test2() {
        boolean result = "18210741899".matches("\\d{11}");
        Log.i("tag", "#####:" + result);
        /**
         * 驗證郵箱
         */
        assertEquals("result:", result, true);
    }
執行
這裡寫圖片描述

這樣我們就可以不啟動我們的App就驗證正則表達式的正確與否了。其中函數assertEquals為斷言函數,用於判斷結果是否正確,可以看到運行結果:1 test passed,說明我們的函數執行正確,即result為true,所以我們的正則表達式是正確的。

總結:

這樣我們經過一系列的操作之後就介紹完了android studio中進行單元測試的步驟,怎麼樣?很簡單吧,O(∩_∩)O哈哈~

android studio默認支持單元測試,可以在module下的androidTest下編寫測試用例

測試用例中提供了獲取Context的API,可以通過該方法獲取Context對象

測試用例方法需要使用注解@Test表明,否則會報錯,找不到測試方法

測試方法需要定義為public,否則報錯

有兩種執行測試方法的方式,可以直接在源碼中右鍵執行,也可以在android studio中配置測試方法


本文以同步至github中:https://github.com/yipianfengye/androidProject,歡迎star和follow


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved