以下是我寫的幾點有關談論單元測試的內部輸入問題,大家參考一下

發表于:2010-08-04來源:作者:點擊數: 標簽:單元輸入
先來說一下我對于 單元測試 的認識吧,我覺得有三種情況: 一是輸入輸出為值,且與 數據庫 無關 二是輸入輸出為值,且與數據庫有關 三是輸入輸出不是值的情況 第一種情況常見于控制類,它的方法,一般情況下,參數就是輸入值,返回值就是輸出值,此時輸出值

先來說一下我對于單元測試的認識吧,我覺得有三種情況:
一是輸入輸出為值,且與數據庫無關
二是輸入輸出為值,且與數據庫有關
三是輸入輸出不是值的情況
第一種情況常見于控制類,它的方法,一般情況下,參數就是輸入值,返回值就是輸出值,此時輸出值只受輸入值的影響
第二種情況常見于實體類,它的方法,一般情況下,與控制類的方法相同,但是輸出值不只是受輸入值的影響,同時還受當前數據庫的內容影響。
第三種情況常見于邊界類(一般就是界面,不知道我這樣理解對不對),一般情況下,它的方法是系統定義的方法,雖然也有參數和返回值,但是對開發人員來說并不是很重要,有時甚至不用。如界面中一個按鈕的clicked事件。
對應于上面的三種情況,測試也有不同。
對于第一種情況,比較好辦,在設計這個類時,就可以寫出測試用例,包括具體的輸入值和期望輸出。
對于第二種情況,在寫測試用例時,就必須先假定數據庫中相應表的數據值,但是在真正測試時,并不能保證數據庫中的真實數據就是我假定的數據,這種情況下,就需要測試人員去查看數據庫的當前內容,就有些麻煩。
對于第三種情況,我根本就不知道怎么去寫測試用例。如一個按鈕的clicked事件,其中有很多步驟,受影響的部分可能也有很多,這些情況在設計時都已經有說明了,如果對照著設計文檔,應該是可以測試的,但要寫測試用例,我就不知從何下手,總不能從設計文檔中抄一遍吧。這種情況下,我現在的觀點是不寫測試用例,讓測試人員直接看設計文檔進行測試。
以上是我的拙見,不知道這種分類是否科學,另外,對于我說的第二種情況和第三種情況,各位有何高見

以下是我寫的幾點有關談論單元測試的內部輸入問題,大家可以參考

內部輸入是函數內部獲得的輸入,包括調用子函數獲得的輸入和局部靜態變量。請看下面的兩組功能完全一樣代碼(差異部分用粗體標出):

代碼一(代碼清單4.1.cpp):

//計算圓的外接正方形的面積
int GetArea(int r)
{
    return (r+r) * (r+r);
}

//判斷指定的正方形是否可以容納圓
//參數int r:圓的半徑
//參數int x:指定正方形邊長
//返回值:不能容納,返回-1;正好可以容納,返回0;有多余空間,返回1
int Compare(int r, int x)
{
       int a1 = GetArea(r);
       int a2 = x*x;
       
        if(a1 == a2)
                return 0;

        if(a1 < a2)
                return 1;

        return -1;
}

//調用compare
int Func(int r, int x)
{
        int result = Compare(r, x);
        printf("result %d\n", result);
        return result;
}

代碼二(代碼清單4.2.cpp):

//計算圓的外接正方形的面積
int GetArea(int r)
{
        return (r+r) * (r+r);
}

//判斷指定的正方形是否可以容納圓
//參數int a1:圓的外接正方形的面積
//參數int x:指定正方形邊長
//返回值:不能容納,返回-1;正好可以容納,返回0;有多余空間,返回1
int Compare(int a1, int x)
{
        int a2 = x*x;
       
        if(a1 == a2)
                return 0;

        if(a1 < a2)
                return 1;

        return -1;
}

//調用compare
int Func(int r, int x)
{
       int a1 = GetArea(r);
        int result = Compare(a1, x);
        printf("result %d\n", result);
        return result;
}

兩組代碼的差別在對GetArea()的調用是在Compare()之內還是之外。假如我們的測試目標是Comapre(),圓的外接正方形的面積a1在代碼一中通過調用Compare()取得,在代碼二中通過參數傳遞,顯然,兩者之間并無本質區別。Compare()的功能是,計算指定正方形的面積后并與外接正方形面積比較,GetArea()只是一個取得數據的調用,GetArea()本身是否正確,不是我們的測試目標,測試目標在于:對參數輸入和 GetArea()的各種輸出是否做了合適的計算,只要這些計算正確,Comapre()就沒有錯誤。因此,從測試角度來看,被測函數調用其他函數(稱為底層函數)所取得的數據,完全可以和通過參數傳遞的數據同等對待,都是一種輸入,稱為內部輸入。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97