前言
相信很多朋友剛接觸Android Studio的時(shí)候跟我會有同樣的問題:
這個(gè)androidTest文件夾和test文件夾有什么作用呢婚瓜?
很多的基礎(chǔ)資料都一筆帶過:這兩個(gè)是編寫測試方法的文件夾怪与,暫時(shí)不過管嚼贡。
于是這個(gè)暫時(shí)不用管汛闸,就不知道暫時(shí)到什么時(shí)候了卫袒。首先編寫測試用例對于新手程序員來說是一個(gè)加分項(xiàng)叁执,所以剛開始接觸Android的時(shí)候齐婴,我們把更多的精力用在熟悉api和開發(fā)思想上是正確的油猫,隨著工作經(jīng)驗(yàn)的增加,我們對于開發(fā)大部分的應(yīng)用已經(jīng)輕車熟路柠偶,分分鐘搞定的時(shí)候情妖,才慢慢發(fā)現(xiàn)編寫測試用例是一件非常重要的事情。
正文
做Android開發(fā)時(shí)間長了诱担,我們會發(fā)現(xiàn)幾個(gè)測試的蛋疼的地方:
1毡证、需要一臺手機(jī),或者是Android模擬器蔫仙。
2料睛、隨著工程的開發(fā),編譯時(shí)間會越來越長摇邦。
3恤煞、有時(shí)候僅僅是想驗(yàn)證一下自己定義的方法是否正確。
例如List中施籍,日期格式從yyyy/MM/dd 變成 yyyy-MM--dd居扒,為了安全起見,修改后都要重新編譯運(yùn)行丑慎,漫長的等待讓我煩躁喜喂,我不保證再簡單的問題我都能一次修改正確,煩躁更容易出現(xiàn)低級的錯(cuò)誤竿裂,于是這個(gè)等待的過程可能還要經(jīng)歷好幾次玉吁。
經(jīng)歷了無數(shù)次的折磨,才發(fā)現(xiàn)Android Studio早就未卜先知铛绰,為我們提供了測試?yán)髡┘耄蔷褪荍uint。
Juint
JUnit是一個(gè)Java語言的單元測試框架捂掰。它由Kent Beck和Erich Gamma建立敢会,逐漸成為源于Kent Beck的sUnit的xUnit家族中最為成功的一個(gè)。 JUnit有它自己的JUnit擴(kuò)展生態(tài)圈这嚣。多數(shù)Java的開發(fā)環(huán)境都已經(jīng)集成了JUnit作為單元測試的工具鸥昏。(來自百度)
我們先來看看再test文件夾中如何編寫本地單元測試,AndroidTest會之后的系列再講姐帚。
Juint的是用來測試Java語言的框架吏垮,也就是說他沒辦法測試一些Android的api,例如View,Activity等等膳汪,但是應(yīng)付我剛才的情況已經(jīng)綽綽有余了唯蝶,尤其是測試我們定義的工具類,或者是性能驗(yàn)證遗嗽,真的是非常方便粘我。
當(dāng)我們創(chuàng)建一個(gè)新的Module,你在gradle文件會看到:
dependencies {
...
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile 'junit:junit:4.12'
}
Android Studio 已經(jīng)自動(dòng)為我們引入了Junit框架痹换,完全不需要我們操心征字,接下來我們就來解決之前的日期轉(zhuǎn)換的問題。
首先我們編寫我們的日期轉(zhuǎn)換工具類TimeUtil:
/**
* Created by li.zhipeng on 2017/9/18.
* <p>
* 時(shí)間轉(zhuǎn)換工具
*/
public class TimeUtil {
public static String formateTime(long time) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
return sdf.format(time);
}
}
之后來編寫本地單元測試娇豫,我們現(xiàn)在test文件夾中的包下匙姜,創(chuàng)建一個(gè)TimeUtilTest的文件:
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* Created by li.zhipeng on 2017/10/10.
*
* 時(shí)間轉(zhuǎn)換的測試用例
*/
public class TimeUtilTest {
/**
* 運(yùn)行的測試方法,注意需要使用@Test注解
*/
@Test
public void timeFormat_isCorrect() throws Exception {
long time = 1505720213000L;
//預(yù)期的結(jié)果
String result = "2017/09/18 15:36:53";
assertEquals(result, TimeUtil.formateTime(time));
}
}
是不是很簡單冯痢,需要運(yùn)行的測試方法需要使用@Test注解標(biāo)記氮昧,assertEquals表示期望result和TimeUtil.formateTime(time)是相等的,也叫做斷言系羞,除了assertEquals還有其他的斷言郭计,這里先不做解釋了。
然后在這個(gè)文件中右鍵椒振,點(diǎn)擊運(yùn)行這個(gè)測試用例或者測試方法:
得到的結(jié)果:
看到測試總共運(yùn)行107ms,一個(gè)測試通過了梧乘,如果沒通過就會出現(xiàn)紅色報(bào)錯(cuò)澎迎。但是我還是不放心,我想看看具體的轉(zhuǎn)換結(jié)果选调,這個(gè)時(shí)候千萬不要用Log夹供,還記得Java的打印用的是什么嗎?System.out.println()仁堪,修改代碼:
public class TimeUtilTest {
/**
* 運(yùn)行的測試方法哮洽,注意需要使用@Test注解
*/
@Test
public void timeFormat_isCorrect() throws Exception {
long time = 1505720213000L;
//預(yù)期的結(jié)果
String result = "2017/09/18 15:36:53";
System.out.println("轉(zhuǎn)換的結(jié)果是:" + Utils.formateTime(time));
assertEquals(result, Utils.formateTime(time));
}
}
運(yùn)行結(jié)果:
我們看到了輸出的結(jié)果的確是和我們期望的一樣。
總結(jié)
經(jīng)過一個(gè)簡單的demo的體驗(yàn)弦聂,不知道你是否覺得方便了很多鸟辅,每一次修改,我只要在電腦上本地測試一下莺葫,直到結(jié)果滿意了匪凉,我再去手機(jī)上運(yùn)行就OK了。
回顧這篇文章捺檬,我們簡單的了解了Junit的作用和使用場景再层,并且通過demo初步了解了他的用法,如果你對于Juint的故事感興趣,我希望是在你能具體的掌握了Juint的用法聂受,再帶著感激之情去了解他的由來蒿秦,相信更能引起你的共鳴。
接下來我們就更加具體的了解Juint 4.0 版本的用法蛋济。