天天看點

單元測試的測試用例編寫方法

                 單元測試的測試用例編寫方法

        我在這裡用最常用的方法:基本路徑測試法來進行單元測試,因為我要用一個實際的例子來進行說明,是以就編寫了下面一個程式子產品,就暫且命名為“詳細查詢子產品”吧。

     我先寫一下基本過程:

    1  分析子產品函數;

    2  在子產品中找到相應的關鍵點(函數);

    3  根據第二點,畫出子產品程式流程圖;

    4  計算圈複雜度;

    5  根據圈複雜度算出測試用例的最優個數;

    6  根據路徑測試法和圈複雜度寫出具體測試用例;

    7  進行測試。   

void CXIANGXIDLG::OnOK() 

CoInitialize(NULL);//初始化COM環境 

_ConnectionPtr m_pConnection;//連接配接對象 

  HRESULT hr;    

  try 

  { 

hr = m_pConnection.CreateInstance("ADODB.Connection");//建立Connection對象    

if(SUCCEEDED(hr))    

    { 

hr=m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=shouji.mdb","","",adModeUnknown);//連庫 

    } 

  } 

  catch(_com_error e) 

AfxMessageBox("資料庫連接配接失敗,确認資料庫連接配接字元串是否正确"); 

  //操縱表 

_RecordsetPtr m_pRecordset; //記錄集對象 

  UpdateData(TRUE); 

  CString strSQL; 

if (m_name=="")                         //路徑1 

MessageBox("使用者名不能為空!"); //函數A 

  else                                                                                                                                                         {UpdateData(TRUE);        //函數B 

  int lenth=0; 

  lenth=m_name.GetLength(); 

if (lenth>12 || length<2)        //路徑2 

  {MessageBox("輸入的使用者名不正确或沒有該使用者!請重新輸入!");                 //函數C 

  Else                                                                                                                                                                                 

if(m_pipei)                        //路徑3 

strSQL="SELECT * FROM sj_T_ShouJiKa where 使用者姓名 = '"+m_name+"'"; //函數D 

  Else    

strSQL="SELECT * FROM sj_T_ShouJiKa where 使用者姓名 like '%"+m_name+"%'";//函數E 

    hr=m_pRecordset.CreateInstance("ADODB.Recordset"); 

    if(SUCCEEDED(hr))    

    { //從資料庫中打開表 

m_pRecordset->Open(_bstr_t(strSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); 

    else 

  AfxMessageBox("查詢不成功!"); 

  catch (_com_error e) 

    CString strError; 

strError.Format("警告:打開資料表時發生異常。 錯誤資訊: %s",e.ErrorMessage()); 

  AfxMessageBox(strError); 

  return; 

while(!m_pRecordset->adoEOF)     //路徑4 

  {                                                                                 //函數F 

    _bstr_t name=""; 

    _bstr_t shoujikahao=""; 

    _bstr_t tongxinzhishi=""; 

    _bstr_t fuwushang=""; 

    int i=0; 

    m_list5.DeleteAllItems(); 

    while(!m_pRecordset->adoEOF) 

name=(_bstr_t)m_pRecordset->GetCollect("使用者姓名"); 

shoujikahao=(_bstr_t)m_pRecordset->GetCollect("手機卡号"); 

tongxinzhishi=(_bstr_t)m_pRecordset->GetCollect("通信制式"); 

fuwushang=(_bstr_t)m_pRecordset->GetCollect("服務商"); 

  m_list5.InsertItem(i,name);    

m_list5.SetItemText(i,1,shoujikahao);//設定該行的不同列的顯示字元 

m_list5.SetItemText(i,2,tongxinzhishi); 

m_list5.SetItemText(i,3,fuwushang); 

m_pRecordset->MoveNext(); 

i=i+1;     

    }    

  }    

  //關閉連接配接、釋放com資源m_pRecordset->Close();     //路徑5 

  m_pRecordset.Release(); 

  m_pConnection->Close(); 

                 m_pConnection.Release(); 

  CoUninitialize(); 

     我們根據這個程式來畫出它的程式控制流圖,如下,是我畫好的:

        有了圖以後我們就要知道到底我們要寫多少個測試用例,才能滿足基本路徑測試。

這裡有有了一個新概念——圈複雜度。

圈複雜度是一種為程式邏輯複雜性提供定量測試的軟體度量。将該度量用于計算程式的基本獨立路徑數目。為確定所有語句至少執行一次的測試數量的下界。

公式圈複雜度    V(G)=E-N+2,E是流圖中邊的數量,N是流圖中結點的數量。

從圖中我們可以看到,

V(G)=8條邊-6結點+2=4

上圖的圈複雜圖是4。這個結果對我們來說有什麼意義呢?它表示我們隻要最多4個測試用例就可以達到基本路徑覆寫。

下一步我們就要導出程式基本路徑。

程式基本路徑:基本獨立路徑就是從程式的開始結點到結束可以選擇任何的路徑周遊,但是每條路徑至少應該包含一條已定義路徑不曾用到的邊。

我們可以得到基本路徑是:

1:  A

2:  B->C

3:  B->D->F

4:  B->E->F

下面我們開始寫測試用例。

     “詳細查詢測試”做完了嗎?沒有,因為對于上表的每一個路徑,如果結果有不同的,即:結果有對的,也有不對的。那麼,我們就還需要進行進一步的測試,下面的工作我就不做了,照搬就是。

     本文轉自阿龍哥 51CTO部落格,原文連結:http://blog.51cto.com/ililong/303128,如需轉載請自行聯系原作者