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