先來說一下我對于單元測試的認識吧,我覺得有三種情況:
一是輸入輸出為值,且與數據庫無關
二是輸入輸出為值,且與數據庫有關
三是輸入輸出不是值的情況
第一種情況常見于控制類,它的方法,一般情況下,參數就是輸入值,返回值就是輸出值,此時輸出值只受輸入值的影響
第二種情況常見于實體類,它的方法,一般情況下,與控制類的方法相同,但是輸出值不只是受輸入值的影響,同時還受當前數據庫的內容影響。
第三種情況常見于邊界類(一般就是界面,不知道我這樣理解對不對),一般情況下,它的方法是系統定義的方法,雖然也有參數和返回值,但是對開發人員來說并不是很重要,有時甚至不用。如界面中一個按鈕的clicked事件。
對應于上面的三種情況,測試也有不同。
對于第一種情況,比較好辦,在設計這個類時,就可以寫出測試用例,包括具體的輸入值和期望輸出。
對于第二種情況,在寫測試用例時,就必須先假定數據庫中相應表的數據值,但是在真正測試時,并不能保證數據庫中的真實數據就是我假定的數據,這種情況下,就需要測試人員去查看數據庫的當前內容,就有些麻煩。
對于第三種情況,我根本就不知道怎么去寫測試用例。如一個按鈕的clicked事件,其中有很多步驟,受影響的部分可能也有很多,這些情況在設計時都已經有說明了,如果對照著設計文檔,應該是可以測試的,但要寫測試用例,我就不知從何下手,總不能從設計文檔中抄一遍吧。這種情況下,我現在的觀點是不寫測試用例,讓測試人員直接看設計文檔進行測試。
以上是我的拙見,不知道這種分類是否科學,另外,對于我說的第二種情況和第三種情況,各位有何高見
以下是我寫的幾點有關談論單元測試的內部輸入問題,大家可以參考
內部輸入是函數內部獲得的輸入,包括調用子函數獲得的輸入和局部靜態變量。請看下面的兩組功能完全一樣代碼(差異部分用粗體標出):
代碼一(代碼清單4.1.cpp):
//計算圓的外接正方形的面積 int GetArea(int r) { return (r+r) * (r+r); } //判斷指定的正方形是否可以容納圓 if(a1 < a2) return -1; //調用compare |
代碼二(代碼清單4.2.cpp):
//計算圓的外接正方形的面積 int GetArea(int r) { return (r+r) * (r+r); } //判斷指定的正方形是否可以容納圓 if(a1 < a2) return -1; //調用compare |
兩組代碼的差別在對GetArea()的調用是在Compare()之內還是之外。假如我們的測試目標是Comapre(),圓的外接正方形的面積a1在代碼一中通過調用Compare()取得,在代碼二中通過參數傳遞,顯然,兩者之間并無本質區別。Compare()的功能是,計算指定正方形的面積后并與外接正方形面積比較,GetArea()只是一個取得數據的調用,GetArea()本身是否正確,不是我們的測試目標,測試目標在于:對參數輸入和 GetArea()的各種輸出是否做了合適的計算,只要這些計算正確,Comapre()就沒有錯誤。因此,從測試角度來看,被測函數調用其他函數(稱為底層函數)所取得的數據,完全可以和通過參數傳遞的數據同等對待,都是一種輸入,稱為內部輸入。
文章來源于領測軟件測試網 http://www.k11sc111.com/