您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
Android下如何使用JUnit進(jìn)行軟件測(cè)試
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2016/4/8 11:12:17 ] 推薦標(biāo)簽:單元測(cè)試 Android

  軟件測(cè)試作為程序員必備的一項(xiàng)技能是決定軟件開(kāi)發(fā)周期長(zhǎng)短以及軟件運(yùn)行成敗的關(guān)鍵,可以說(shuō)好的軟件不是代碼寫(xiě)得好而是有效的測(cè)試決定的。本文將介紹在android下利用eclipse進(jìn)行開(kāi)發(fā)時(shí)如何使用JUnit進(jìn)行單元測(cè)試。
  一、測(cè)試的分類(lèi)(僅舉例其中一些方法)
  【根據(jù)測(cè)試是否知道代碼】
  1、黑盒測(cè)試(測(cè)試的時(shí)候不知道具體代碼):指的是把被測(cè)的軟件看作是一個(gè)黑盒子,我們不去關(guān)心盒子里面的結(jié)構(gòu)是什么樣子的,只關(guān)心軟件的輸入數(shù)據(jù)和輸出結(jié)果。它只檢查程序功能是否按照需求規(guī)格說(shuō)明書(shū)的規(guī)定正常使用,程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)而產(chǎn)生正確的輸出信息。黑盒測(cè)試著眼于程序外部結(jié)構(gòu),不考慮內(nèi)部邏輯結(jié)構(gòu),主要針對(duì)軟件界面和軟件功能進(jìn)行測(cè)試。
  2、白盒測(cè)試(測(cè)試的時(shí)候需要了解具體的代碼):指的是把盒子蓋子打開(kāi),去研究里面的源代碼和程序結(jié)果。是按照程序內(nèi)部的結(jié)構(gòu)測(cè)試程序,通過(guò)測(cè)試來(lái)檢測(cè)產(chǎn)品內(nèi)部動(dòng)作是否按照設(shè)計(jì)規(guī)格說(shuō)明書(shū)的規(guī)定正常進(jìn)行,檢驗(yàn)程序中的每條通路是否都能按預(yù)定要求正確工作。
  3、灰盒測(cè)試(灰盒測(cè)試介于黑盒測(cè)試與白盒測(cè)試之間):可以這樣理解,灰盒測(cè)試關(guān)注輸出對(duì)于輸入的正確性,同時(shí)也關(guān)注內(nèi)部表現(xiàn),但這種關(guān)注不象白盒那樣詳細(xì)、完整,只是通過(guò)一些表征性的現(xiàn)象、事件、標(biāo)志來(lái)判斷內(nèi)部的運(yùn)行狀態(tài),有時(shí)候輸出是正確的,但內(nèi)部其實(shí)已經(jīng)錯(cuò)誤了,這種情況非常多,如果每次都通過(guò)白盒測(cè)試來(lái)操作,效率會(huì)很低,因此需要采取這樣的一種灰盒的方法。
  【根據(jù)測(cè)試的粒度】
  1、方法測(cè)試(function test):驗(yàn)證模塊的功能。
  2、單元測(cè)試(unit test):在低的功能/參數(shù)上驗(yàn)證程序的準(zhǔn)確性,比如測(cè)試一個(gè)函數(shù)的正確性。
  3、集成測(cè)試(intergration test):驗(yàn)證幾個(gè)互相有依賴(lài)關(guān)系的模塊的功能。
  【根據(jù)測(cè)試的次數(shù)】
  1、冒煙測(cè)試(smoke test):指的是測(cè)試人員在同一時(shí)間對(duì)軟件進(jìn)行大量的點(diǎn)擊或者功能測(cè)試,測(cè)試軟件遭到這樣的壓力時(shí)是否能夠扛得住,關(guān)鍵在于同一個(gè)用戶(hù)在極短的時(shí)間內(nèi)對(duì)軟件進(jìn)行大量重復(fù)的測(cè)試。
  2、壓力測(cè)試(pressure test):指的是軟件或者網(wǎng)站在同一時(shí)間內(nèi)被大量的用戶(hù)訪問(wèn),突出的是軟件或者網(wǎng)站被大量客戶(hù)訪問(wèn)時(shí)的抗壓能力,一般運(yùn)用于大型網(wǎng)站的測(cè)試。
  二、舉例對(duì)其中的JUnit測(cè)試進(jìn)行講解
  這里我們想要對(duì)安卓應(yīng)用程序中AppService類(lèi)中的randomArray()方法進(jìn)行單元測(cè)試。
  注:試直接使用java的JUnit是無(wú)效的,應(yīng)為java應(yīng)用程序時(shí)在java虛擬機(jī)(JVM)運(yùn)行的,而安卓程序則是在終端的Dalvik虛擬機(jī)運(yùn)行的,所以直接對(duì)其進(jìn)行JUnit測(cè)試會(huì)報(bào)錯(cuò),故我們可以使用以下方法進(jìn)行測(cè)試。
  1、創(chuàng)建一個(gè)包,并在包下新建一個(gè)測(cè)試類(lèi)(TestService)用來(lái)測(cè)試該方法,具體代碼如下:
  AppService 的randomArray方法:
1 package com.app.wolf;
2
3 public class AppService {
4 /**
5      * 隨機(jī)指定范圍內(nèi)N個(gè)不重復(fù)的數(shù) 在初始化的無(wú)重復(fù)待選數(shù)組中隨機(jī)產(chǎn)生一個(gè)數(shù)放入結(jié)果中,
6      * 將待選數(shù)組被隨機(jī)到的數(shù),用待選數(shù)組(len-1)下標(biāo)對(duì)應(yīng)的數(shù)替換 然后從len-2里隨機(jī)產(chǎn)生下一個(gè)隨機(jī)數(shù),如此類(lèi)推
7      *
8      * @param max
9      *            指定范圍大值
10      * @param min
11      *            指定范圍小值
12      * @param n
13      *            隨機(jī)數(shù)個(gè)數(shù)
14      * @return int[] 隨機(jī)數(shù)結(jié)果集
15      */
16     public static int[] randomArray(int min, int max, int n) {
17         int len = max - min + 1;
18
19         if (max < min || n > len) {
20             return null;
21         }
22
23         // 初始化給定范圍的待選數(shù)組
24         int[] source = new int[len];
25         for (int i = min; i < min + len; i++) {
26             source[i - min] = i;
27         }
28
29         int[] result = new int[n];
30         Random rd = new Random();
31         int index = 0;
32         //這個(gè)算法666,我理解的步驟應(yīng)該是這樣的
33         //1、首先初始化一個(gè)數(shù)組source,這個(gè)數(shù)組的長(zhǎng)度是用戶(hù)選擇要開(kāi)始游戲的人數(shù),接著將數(shù)組中的元素分別是0~數(shù)組長(zhǎng)度-1;
34         //2、接著借用一個(gè)一個(gè)隨機(jī)變量index,這個(gè)變量產(chǎn)生的隨機(jī)數(shù)范圍是0~數(shù)組長(zhǎng)度-1;
35         //3、后將每一個(gè)index對(duì)應(yīng)的source的內(nèi)容對(duì)應(yīng)到后返回的result數(shù)組中;
36         //厲害的地方是首先用index索引取得source數(shù)組中的內(nèi)容,此時(shí)數(shù)組的長(zhǎng)度減1,接著用數(shù)組的后一個(gè)元素來(lái)代替之,
37         //這樣不會(huì)出現(xiàn)數(shù)組中元素被重復(fù)使用的情況了。
38         for (int i = 0; i < result.length; i++) {
39             // 待選數(shù)組0到(len-2)隨機(jī)一個(gè)下標(biāo)
40             index = Math.abs(rd.nextInt() % len--);
41             // 將隨機(jī)到的數(shù)放入結(jié)果集
42             result[i] = source[index];
43             // 將待選數(shù)組中被隨機(jī)到的數(shù),用待選數(shù)組(len-1)下標(biāo)對(duì)應(yīng)的數(shù)替換
44             source[index] = source[len];
45         }
46         for(int i:result){
47             System.out.print(i+" ");
48         }
49         return result;
50     }
51
52 }

上一頁(yè)12下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd