Android單元測試的利器:Juint(一):Juint的介紹和基礎(chǔ)使用

前言

相信很多朋友剛接觸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 版本的用法蛋济。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渤早,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瘫俊,更是在濱河造成了極大的恐慌鹊杖,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扛芽,死亡現(xiàn)場離奇詭異骂蓖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)川尖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門登下,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叮喳,你說我怎么就攤上這事被芳。” “怎么了馍悟?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵畔濒,是天一觀的道長。 經(jīng)常有香客問我锣咒,道長侵状,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任毅整,我火速辦了婚禮趣兄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悼嫉。我一直安慰自己艇潭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布戏蔑。 她就那樣靜靜地躺著蹋凝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辛臊。 梳的紋絲不亂的頭發(fā)上仙粱,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機(jī)與錄音彻舰,去河邊找鬼伐割。 笑死候味,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的隔心。 我是一名探鬼主播白群,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼硬霍!你這毒婦竟也來了帜慢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤唯卖,失蹤者是張志新(化名)和其女友劉穎粱玲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拜轨,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抽减,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了橄碾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卵沉。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖法牲,靈堂內(nèi)的尸體忽然破棺而出史汗,到底是詐尸還是另有隱情,我是刑警寧澤拒垃,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布停撞,位于F島的核電站,受9級特大地震影響恶复,放射性物質(zhì)發(fā)生泄漏怜森。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一谤牡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧姥宝,春花似錦翅萤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碳蛋,卻和暖如春胚泌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肃弟。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工玷室, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留零蓉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓穷缤,卻偏偏與公主長得像敌蜂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子津肛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,095評論 25 707
  • Android單元測試介紹 處于高速迭代開發(fā)中的Android項(xiàng)目往往需要除黑盒測試外更加可靠的質(zhì)量保障章喉,這正是單...
    東經(jīng)315度閱讀 3,107評論 6 37
  • 做開發(fā)這么長時(shí)間了,對app測試一直沒有深入研究過身坐。平時(shí)開發(fā)完后秸脱,都是自己根據(jù)原型操作一下,沒有太大問題就交給其他...
    皇馬船長閱讀 6,451評論 0 6
  • 個(gè)人實(shí)際測試過部蛇,成功摊唇。(環(huán)境:SDK1.6,WindowsEclipse 及仿真板上均運(yùn)行成功。原作者的 “兩個(gè)測...
    4528283108ee閱讀 720評論 0 1
  • 在centos6.7 x64上編譯安裝mesos 0.24.0時(shí)需要使用gcc 4.8以上版本, 此處記錄編譯方法...
    imsilence閱讀 1,116評論 0 0