Android-針對Dao層的單元測試

Android的單元測試大家都不陌生慢叨,必要的單元測試可以提高工作效率纽匙,省去大量的在Android真機或者虛擬機上的調(diào)試,提高代碼質(zhì)量拍谐。尤其是在團隊項目開發(fā)中烛缔,為自己寫的代碼負(fù)責(zé)馏段,提高項目后期的可維護性。這篇文章算是個人心得體會吧践瓷。
前幾天接了一個任務(wù)就是對團隊中現(xiàn)有的一個項目的dao層寫單元測試(數(shù)據(jù)訪問對象)院喜,該項目中的數(shù)據(jù)庫適配器(MyDataBaseAdapter)中集成了大量的關(guān)于數(shù)據(jù)庫中增,刪晕翠,改喷舀,查的方法,現(xiàn)在要測試這些函數(shù)的功能淋肾。然后就遇到了一些問題硫麻,比如說不能對原有的數(shù)據(jù)庫帶來臟數(shù)據(jù),而且要測試這些方法還必須要在數(shù)據(jù)庫中測試樊卓。搜集了一些資料比如Spring結(jié)合junit利用對數(shù)據(jù)庫的回滾操作進行測試拿愧。但還是找到了更好的方法,就是robolectric框架简识。
有關(guān)Robolectric測試框架的詳細知識個人感覺簡書:鍵盤男http://www.reibang.com/u/0ef3dc77079c他的博客寫的是很不錯的有關(guān)其他的測試可以參考一下赶掖。
接下來總結(jié)一下對dao層的測試。

添加依賴七扰,(3.3.2并不是最新版本)

testCompile 'org.robolectric:robolectric:3.3.2'

定義數(shù)據(jù)工具類

定義的字段對應(yīng)之前數(shù)據(jù)庫的字段(比如原數(shù)據(jù)庫需要測試id或name的刪除更新等奢赂,根據(jù)需求定義)
如果數(shù)據(jù)庫表字段較少,可以直接插入數(shù)據(jù)颈走,不用定義該類

public class BaseInfo {
   
    private int id(字段1)膳灶;
    private String name(字段2);
               ·
               ·
               ·
               ·
               ·
    private int 字段13;
    private String 字段14;

  

    public BaseInfo(int id,String name,``````,) {
        super();
    this.id=id;
    this.name=name;
            `
            `
            `
     this.XX=XX;
      
    }

設(shè)置geter和seter

}

定義各表字段


定義測試用的insert函數(shù)(將數(shù)據(jù)插入數(shù)據(jù)庫)

public Long insertTestData(BasemInfo basemInfo){
                //hashmap保存表列與數(shù)據(jù)
        ContentValues initialValues = new ContentValues();
        initialValues.put(列名._ID,baseInfo.getID());
        `
                `
                `
                `
        initialValues.put(列名.NAME,baseInfo.getNAME());
        return  mSQLiteDatabase.insert(數(shù)據(jù)庫表名, null, initialValues);
    }

測試之前的環(huán)境配置

用這個框架測試之前建立一個新的數(shù)據(jù)庫立由,用于各種測試轧钓,每個測試結(jié)束后自動刪除數(shù)據(jù)庫,所以不用擔(dān)心對原有的數(shù)據(jù)庫造成干擾锐膜。

@RunWith(RobolectricTestRunner.class)//Robolectric是一個單元測試框架毕箍,可以對Android SDK jar進行消除
@Config(constants = BuildConfig.class, sdk = 21, manifest = Config.NONE)//配置環(huán)境sdk版本等等
/**
 * 該類用于測試數(shù)據(jù)庫的一些增刪改查的方法
 * 測試用類
 */
public class TestMyDataBaseAdapter {

    public MyDataBaseAdapter myDataBaseAdapter;
    private SQLiteDatabase mSQliteDatabase;
    private Context mContext;
    //用來添加一條模擬數(shù)據(jù)(自定義的數(shù)據(jù)bean類,收集數(shù)據(jù)且對應(yīng)數(shù)據(jù)庫字段)
    private static BaseInfo testBaseInfo;

    @Before
    public void setUp() {
        //創(chuàng)建并打開數(shù)據(jù)庫
        myDataBaseAdapter =new MyDataBaseAdapter(RuntimeEnvironment.application);
        //獲得測試環(huán)境
        mContext = RuntimeEnvironment.application;
        mSQliteDatabase = myDataBaseAdapter.getSQLiteDatabase();
        //輸出log
        ShadowLog.stream=System.out;
        /**
         * 測試用的模擬數(shù)據(jù)
         */
        testBaseInfo=new BaseInfo(
                4,//數(shù)據(jù)id=4
                張三,//下面均為虛擬測試數(shù)據(jù)(每個數(shù)據(jù)對應(yīng)數(shù)據(jù)庫表的字段道盏,根據(jù)被測的函數(shù)模擬即可)
                0,
                null,
                "測試1",
                0,
                1000,
                "a",
                false,
                0,
                0,
                0,
                0,
                null,
                null,
                (byte)1,
                (byte)0,
                0,
                0
        );
    }

    @After
    public void tearDown() {
        //結(jié)束測試關(guān)閉數(shù)據(jù)庫
        myDataBaseAdapter.close();
    }

    /**
     * 根據(jù)id更新name
     *
     */
    @Test
    public void update() {
        //數(shù)據(jù)庫表插入測試數(shù)據(jù)
        myDataBaseAdapter.insertTestData(testBaseInfo);
        //調(diào)用被測試的方法update而柑,修改id=4的name值為李四(原本為張三)
        //輸入期望的值
        int expectValues=李四;
        myDataBaseAdapter.update(testBaseInfo.getID(),expectValues);
        Cursor cursor= myDataBaseAdapter.getDataByTimerId(testBaseInfo.getID());
        //利用Cursor查出來真實的值(也可以直接用Sql語句)
        cursor.moveToFirst();
        String t actualValues=cursor.getString(MyDataBaseAdapter.NAME_INDEX);
        //對比兩者值是否相同
        cursor.close();
        Assert.assertEquals(expectValues,actualValues);

    }

    /**
     * 更新Xxxx
     */
    @Test
    public void updateXxxx() {
         1.測試數(shù)據(jù)插入數(shù)據(jù)庫
         2.調(diào)用被測函數(shù),修改對應(yīng)參數(shù)的值(期望值)
         3.取出該數(shù)據(jù)(真實值)
         4.期望值與真實值比較
    }

     /**
     * 插入Xxxx
     */
    @Test
    public void insertXxxx() {
         1.調(diào)用被測函數(shù)荷逞,插入一條數(shù)據(jù)(期望值)
         2.取出該數(shù)據(jù)(真實值)
         3.期望值與真實值比較
    }
            ·
            ·
            ·
  
}

查找媒咳,刪除等也可以用類似的思想單元測試。
正在學(xué)習(xí)安卓种远,希望能夠多積累涩澡,多提升

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市坠敷,隨后出現(xiàn)的幾起案子妙同,更是在濱河造成了極大的恐慌射富,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渐溶,死亡現(xiàn)場離奇詭異辉浦,居然都是意外死亡,警方通過查閱死者的電腦和手機茎辐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門宪郊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拖陆,你說我怎么就攤上這事弛槐。” “怎么了依啰?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵乎串,是天一觀的道長。 經(jīng)常有香客問我速警,道長叹誉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任闷旧,我火速辦了婚禮长豁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忙灼。我一直安慰自己匠襟,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布该园。 她就那樣靜靜地躺著酸舍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪里初。 梳的紋絲不亂的頭發(fā)上啃勉,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音双妨,去河邊找鬼淮阐。 笑死,一個胖子當(dāng)著我的面吹牛斥难,可吹牛的內(nèi)容都是我干的枝嘶。 我是一名探鬼主播帘饶,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼哑诊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了及刻?” 一聲冷哼從身側(cè)響起镀裤,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤竞阐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后暑劝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骆莹,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年担猛,在試婚紗的時候發(fā)現(xiàn)自己被綠了幕垦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡傅联,死狀恐怖先改,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蒸走,我是刑警寧澤仇奶,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布招驴,位于F島的核電站翰灾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏绅络。R本人自食惡果不足惜别惦,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一狈茉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧步咪,春花似錦论皆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至悯周,卻和暖如春粒督,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背禽翼。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工屠橄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闰挡。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓锐墙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親长酗。 傳聞我的和親對象是個殘疾皇子溪北,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

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

  • Android單元測試介紹 處于高速迭代開發(fā)中的Android項目往往需要除黑盒測試外更加可靠的質(zhì)量保障,這正是單...
    東經(jīng)315度閱讀 3,108評論 6 37
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,133評論 25 707
  • 今天,家里請客 一早起來之拨,買菜茉继,這是我對大家的愛,二姐幫忙來帶孩子蚀乔,讓我非常的輕松烁竭,這是二姐對我的愛~~讓孩子今天...
    Lulu輕悅閱讀 314評論 0 0
  • “你現(xiàn)在有什么立場說這些話么?” 這句話是在喝醉的一個晚上吉挣,發(fā)瘋了似的找他遠在喵本的朋友要到了他的電話派撕,他說的第一...
    拂夜子歸閱讀 181評論 0 0
  • 哈哈,第一時間po出照片睬魂!對的腥刹,這就是我,正在做平板支撐汉买,兩分多鐘的時間衔峰,又爽又累。雖然是上個月辦的健身卡蛙粘,但是很...
    魚泡泡不是泡沫閱讀 356評論 8 1