Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發(fā)。尚未有統(tǒng)一中文名稱,中國大陸地區(qū)較多人使用“安卓”或“安致”。Android操作系統(tǒng)最初由Andy Rubin開發(fā),主要支持手機。
Android一詞的本義指“機器人”,同時也是Google于2007年11月5日
Android logo相關圖片
宣布的基于Linux平臺的開源手機操作系統(tǒng)的名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應用軟件組成。
Android一詞最早出現于法國作家利爾亞當(Auguste Villiers de l‘Isle-Adam)在1886年發(fā)表的科幻小說《未來夏娃》(L’ève future)中。他將外表像人的機器起名為Android。
Android的Logo是由Ascender公司設計的,誕生于2010年,其設計靈感源于男女廁所門上的圖形符號,[1] 于是布洛克繪制了一個簡單的機器人,它的軀干就像錫罐的形狀,頭上還有兩根天線,Android小機器人便誕生了。其中的文字使用了Ascender公司專門制作的稱之為“Droid ” 的字體。Android是一個全身綠色的機器人,綠色也是Android的標志。顏色采用了PMS 376C和RGB中十六進制的#A4C639來繪制,這是Android操作系統(tǒng)的品牌象徵。有時候,它們還會使用純文字的Logo。
如何在Android studio中進行單元測試。在Android開發(fā)項目中,經常會進行測試操作,而一次又一次的運行模擬器,浪費了大量時間,降低了工作效率降低,雖然最新的Android studio中提供了instance run功能,來提高Android studio的編譯速度,但是我們還是需要了解Android studio的單元測試功能,其可以很方便的為我們提供功能性測試,所以如果項目中有用到測試數據的時候,可以先進行單元測試,如果可以正常輸出數據了,然后再到UI中執(zhí)行,這樣會提高一些工作效率。
什么是單元測試:
在講解如何在Android studio中進行單元測試之前我們先普及一下基本知識,即什么是單元測試,這里我先引用一下百科中對單元測試的描述:
是指對軟件中的最小可測試單元進行檢查和驗證。對于單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語言中單元指一個函數,Java里單元指一個類,圖形化的軟件中可以指一個窗口或一個菜單等??偟膩碚f,單元就是人為規(guī)定的最小的被測功能模塊。單元測試是在軟件開發(fā)過程中要進行的最低級別的測試活動,軟件的獨立單元將在與程序的其他部分相隔離的情況下進行測試。
簡單來說單元測試就是將一個軟件功能拆分成N個最小的不可拆分的單元功能點,對著單元功能點的測試就是單元測試。
單元測試有什么作用:
Android中的測試一般分為:功能測試,ui測試,單元測試等等;
由于app運行需要Android運行環(huán)境,而我們的Android的單元測試一般無法提供運行環(huán)境,所以一般像功能測試,UI測試等都需要在模擬器或者是真機上進行,但是一些功能性的需求不需要Android環(huán)境的功能,如果也使用Android studio重新編譯運行,那么耗費的時間就太長了,一般來說一個apk文件編譯,安裝,運行的時間一兩分鐘都是普遍的,三四分鐘也可能,這樣為了測試一個簡單的功能,就需要花費這么長的時間重新編譯運行,性價比太低。
因此單元測試主要是功能測試,主要用于測試一些功能性的需求;比如網絡請求,比如數據存儲等等。
Android studio對單元測試的支持:
新版的Android studio中添加了對單元測試的支持;如圖所示:
該目錄下編寫測試用例即可。
單元測試可以測試那些內容?
這里需要說明的是Android studio的單元測試由于只是模擬Android開發(fā)環(huán)境,但是其不是真正的Android開發(fā)環(huán)境,所以不能測試UI功能,不能測試需要硬件支持的功能(比如藍牙,wifi等),不能測試App跳轉等等,那么其可以測試那些內容呢?
測試一些數據性的功能,比如加載網絡數據
測試SharedPerferences,測試數據庫,測試函數等
工具類的測試,比如驗證時間,轉化格式,正則驗證等等
簡單的單元測試用例:
我們來看一下測試用例的寫法:
/**
* Instrumentation test, which will execute on an Android device.
*
* @see 《a href=“http://d.Android.com/tools/testing”》Testing documentation《/a》
*/
@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());
}
}12345678910111213141516
這是項目創(chuàng)建的默認的單元測試的類,可以看到其和普通的Class類無太多的區(qū)別,只是調用了相應的測試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);
}
}12345678910111213141516171819
需要注意的是
測試用例類需要使用注解:@MediumTest和@RunWith(AndroidJUnit4.class)
我們所寫的測試用例方法需要添加名稱為Test的注解,否則的話,就找不到測試方法。
比如我們去掉注解Test的話:
再次執(zhí)行的話,就找不到可執(zhí)行的測試函數了。
還有一個問題,可以發(fā)現我們的函數都是這是的public的,如果我們設置我們的測試函數為private的貨怎么樣呢?修改測試函數
/**
* 單元測試,測試函數
*/
@Test
private void test2() {
Log.i(“tag”, “$$$$$$$$$$$$”);
assertEquals(“result:”, 123, 100 + 33);
}12345678
執(zhí)行之后可以發(fā)現:
報錯了,錯誤說明也很詳細,說的是我們的測試函數需要設置為Public的,所以我們在編寫測試函數的時候需要注意兩點:
測試函數需要為public
測試函數需要添加@Test注解
如何執(zhí)行測試用例
直接在源碼中右鍵執(zhí)行
編寫完成之后,如何運行呢?
可以選中需要測試的方法名稱,然后右擊,彈出操作提示框,這是選擇run 方法名就可以了,這時候就可以執(zhí)行該測試方法了。
測試用例里面為我們提供了測試過程中可能需要的系統(tǒng)環(huán)境對象
比如:application,context等等;以后我們再次編寫單元測試的時候是不是很方便了呢?
Android studio菜單中執(zhí)行測試用例
?。?選擇run-edit configuration
- 添加Android tests用例
?。?配置tests方法
點擊ok,這時候run區(qū)域就已經出現了我們剛剛添加的測試用例了
一個簡單的單元測試小例子:
說了這么多,我們還是舉一個實力的開發(fā)例子吧。
情景
有這樣的一種情況,我們在開發(fā)過程中需要使用正則表達式驗證一個字符串,但是我們想在重新編譯Apk之前驗證一下這個正則表達式,直接運行項目也可以打,但是太慢了,有什么簡單的方式能夠驗證呢?這時候就可以使用我們的單元測試了。
編碼
/**
* 單元測試,測試函數
*/
@Test
public void test2() {
boolean result = “18210741899”.matches(“\d{11}”);
Log.i(“tag”, “#####:” + result);
/**
* 驗證郵箱
*/
assertEquals(“result:”, result, true);
}123456789101112
執(zhí)行
這樣我們就可以不啟動我們的App就驗證正則表達式的正確與否了。其中函數assertEquals為斷言函數,用于判斷結果是否正確,可以看到運行結果:1 test passed,說明我們的函數執(zhí)行正確,即result為true,所以我們的正則表達式是正確的。
總結:
這樣我們經過一系列的操作之后就介紹完了Android studio中進行單元測試的步驟,怎么樣?很簡單吧,O(∩_∩)O哈哈~
Android studio默認支持單元測試,可以在module下的AndroidTest下編寫測試用例
測試用例中提供了獲取Context的API,可以通過該方法獲取Context對象
測試用例方法需要使用注解@Test表明,否則會報錯,找不到測試方法
測試方法需要定義為public,否則報錯
有兩種執(zhí)行測試方法的方式,可以直接在源碼中右鍵執(zhí)行,也可以在Android studio中配置測試方法
執(zhí)行單元測試會重新執(zhí)行apk的編譯,打包,安裝操作,其優(yōu)勢是幫你免去了手動的打開某個頁面執(zhí)行某個操作的步驟。
評論
查看更多