1)掌握單元測試的方法
2) 學習xunit測試原理及框架;
3)掌握使用測試框架進行單元測試的方法和過程。
單元測試(unit testing),是指對軟體中的最小可測試單元進行檢查和驗證。對於單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如c語言中單元指乙個函式,j**a裡單元指乙個類,圖形化的軟體中可以指乙個視窗或乙個選單等。總的來說,單元就是人為規定的最小的被測功能模組。單元測試是在軟體開發過程中要進行的最低級別的測試活動,軟體的獨立單元將在與程式的其他部分相隔離的情況下進行測試。單元測試是由程式設計師自己來完成,最終受益的也是程式設計師自己。可以這麼說,程式設計師有責任編寫功能**,同時也就有責任為自己的**編寫單元測試。執行單元測試,就是為了證明這段**的行為和我們期望的一致。
單元測試的內容包括
模組介面測試、區域性資料結構測試、路徑測試、錯誤處理測試、邊界測試
模組介面測試是單元測試的基礎。只有在資料能正確流入、流出模組的前提下,其他測試才有意義。模組介面測試也是整合測試的重點,這裡進行的測試主要是為後面打好基礎。測試介面正確與否應該考慮下列因素:
-輸入的實際引數與形式引數的個數是否相同
-輸入的實際引數與形式引數的屬性是否匹配
-輸入的實際引數與形式引數的量綱是否一致
-呼叫其他模組時所給實際引數的個數是否與被調模組的形參個數相同;
-呼叫其他模組時所給實際引數的屬性是否與被調模組的形參屬性匹配;
-呼叫其他模組時所給實際引數的量綱是否與被調模組的形參量綱一致;
-呼叫預定義函式時所用引數的個數、屬性和次序是否正確;
-是否存在與當前入口點無關的引數引用;
-是否修改了唯讀型引數;
-對全程變數的定義各模組是否一致;
-是否把某些約束作為引數傳遞。
如果模組功能包括外部輸入輸出,還應該考慮下列因素:
-檔案屬性是否正確;
-open/close語句是否正確;
-格式說明與輸入輸出語句是否匹配;
-緩衝區大小與記錄長度是否匹配;
-檔案使用前是否已經開啟;
-是否處理了檔案尾;
-是否處理了輸入/輸出錯誤;
-輸出資訊中是否有文本性錯誤。
-區域性資料結構測試;
-邊界條件測試;
-模組中所有獨立執行通路測試;
檢查區域性資料結構是為了保證臨時儲存在模組內的資料在程式執行過程中完整、正確,區域性功能是整個功能執行的基礎。重點是一些函式是否正確執行,內部是否執行正確。區域性資料結構往往是錯誤的根源,應仔細設計測試用例,力求發現下面幾類錯誤:
-不合適或不相容的型別說明;
-變數無初值;
-變數初始化或省缺值有錯;
-不正確的變數名(拼錯或不正確地截斷);
-出現上溢、下溢和位址異常。
邊界條件測試是單元測試中最重要的一項任務。眾所周知,軟體經常在邊界上失效,採用邊界值分析技術,針對邊界值及其左、右設計測試用例,很有可能發現新的錯誤。邊界條件測試是一項基礎測試,也是後面系統測試中的功能測試的重點,邊界測試執行的較好,可以大大提高程式健壯性。
(4)獨立路徑測試
在模組中應對每一條獨立執行路徑進行測試,單元測試的基本任務是保證模組中每條語句至少執行一次。測試目的主要是為了發現因錯誤計算、不正確的比較和不適當的控制流造成的錯誤。具體做法就是程式設計師逐條除錯語句。常見的錯誤包括:
-誤解或用錯了算符優先順序;
-混合型別運算;
-變數初值錯;
-精度不夠;
-表示式符號錯。
(5)錯誤處理測試
檢查模組的錯誤處理功能是否包含有錯誤或缺陷。例如,是否拒絕不合理的輸入;出錯的描述是否難以理解、是否對錯誤定位有誤、是否出錯原因報告有誤、是否對錯誤條件的處理不正確;在對錯誤處理之前錯誤條件是否已經引起系統的干預等。
通常單元測試在編碼階段進行。在源程式**編制完成,經過評審和驗證,確認沒有語法錯誤之後,就開始進行單元測試的測試用例設計。利用設計文件,設計可以驗證程式功能、找出程式錯誤的多個測試用例。對於每一組輸入,應有預期的正確結果。
xunit是各種**驅動測試框架的統稱,這些框架可以測試 軟體的不同內容(單元),比如函式和類。xunit框架的主要優點是,它提供了乙個自動化測試的解決方案。可以避免多次編寫重複的測試**。
底層是xunit的framwork,xunit的類庫,提供了對外的功能方法、工具類、api等
testcase(具體的測試用例)去使用framwork
testcase執行後會有testresult
使用testsuite控制testcase的組合
testrunner執行器,負責執行case
testlistener過程監聽,監聽case成功失敗以及資料結果,輸出到結果報告中。
unit測試框架包括四個要素:
(1)測試目標(物件)
一組認定被測物件或被測程式單元測試成功的預定條件或預期結果的設定。fixture就是被測試的目標,可以是乙個函式、一組物件或乙個物件。測試人員在測試前應了解被測試的物件的功能或行為。
(2)測試集
測試集是一組測試用例,這些測試用例要求有相同的測試fixture,以保證這些測試不會出現管理上的混亂。
(3)測試執行
單個單元測試的執行可以按下面的方式進行:
第一步 編寫 setup() 函式,目的是:建立針對被測試單元的獨立測試環境;舉個例子,這可能包含建立臨時或**的資料庫、目錄,再或者啟動乙個伺服器程序。
第二步 編寫所有測試用例的測試體或者測試程式;
第三步 編寫teardown()函式,目的是:無論測試成功還是失敗,都將環境進行清理,以免影響後續的測試;
(4)斷言
斷言實際上就是驗證被測程式在測試中的行為或狀態的乙個函式或者巨集。斷言的失敗會引發異常,終止測試的執行。
1.3 面向特定語言的,基於xunit框架的自動化測試框架
junit : 主要測試用j**a語言編寫的**
cppunit:主要測試用c++語言編寫的**
unittest , pyunit:主要測試用python語言編寫的**
miniunit: 主要用於測試c語言編寫的**
三、實驗過程
本次實驗,我使用的程式語言是j**a,程式設計軟體是eclise,外掛程式是junit。
1原始碼:
packagegameoflife;import j**a.awt.*;
import j**ax.swing.*;
public class world extends jpanel implements runnable
}generation2=newcellstatus[rows][columns];
for(int i=0;i)
}currentgeneration=generation1;
nextgeneration=generation2;}
public voidrun()
catch(interruptedexception e)
}repaint();
sleep(1);/*定義睡眠時間*/
for(int i=0;i)
}cellstatustemp=null;
temp=currentgeneration;
currentgeneration=nextgeneration;/*迭代結果*/nextgeneration=temp;
for(int i=0;i)}}
}}public void paintcomponent(graphics g)/*根據矩陣的值進行繪圖*/
else}}
}public voidsetarrow()
public voidsetsquare()
public voidsetwd()
private void setshape(intshape)
}for(int i=0;i)}}
ischanging=false;
this.notifyall();}}
public void evolve(int x,int y)/*衍化的具體規則實現*/
else if(activesurroundingcell==2)
else
}private boolean isvaildcell(int x,inty)
else
}
走進單元測試五 單元測試文章系列目錄
目錄 1,走進單元測試一 初認unit test 2,走進單元測試二 測試需要從哪些方面著手 3,走進單元測試三 實戰單元測試 4,走進單元測試四 單元測試背後的思考和感悟 note 在編 的過程進行單元測試將是最佳實踐!通過一周的時間整理了一下自己對於單元測試的理解,也是一種反省把,在總結過程中發...
單元測試 單元測試文章收藏
前言 前段時間公司計畫做自動化測試,自己也打算圍繞幾個點做相關調研,現在想想呢?其實對自動化測試的概念都還不是十分清晰,當時主要還是圍繞 單元測試 向qa小夥伴學習了一段時間,現由於公司重組,學習中斷,這裡簡單記錄一些單元測試好文,留待後續參考.什麼叫自動化測試?自動化測試覆蓋率?覆蓋率如何做到的?...
單元測試之Django單元測試
每個應用,自帶tests.py 整合在django的專案檔案裡,更多是開發人員寫django自動的測試執行 3.1 前後置方法執行特點 django.test.testcase類主要由前 後置處理方法和test開頭的方法組成 特點 繼承於django.test.testcase 測試用例都是test...