单元测试的测试用例编写方法

简介:








                  单元测试的测试用例编写方法
        我在这里用最 常用的方法:基本路径测试法来进行单元测试,因为我要用一个实际的例子来进行说明,所以就编写了下面一个程序模块,就暂且命名为“详细查询模块”吧。
     我先写一下基本过程:
    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 
  } 
 
   try 
  { 
    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 ,如需转载请自行联系原作者







相关文章
|
6月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
492 1
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
如何让AI更“聪明”?VLM模型的优化策略与测试方法全解析​
本文系统解析视觉语言模型(VLM)的核心机制、推理优化、评测方法与挑战。涵盖多模态对齐、KV Cache优化、性能测试及主流基准,助你全面掌握VLM技术前沿。建议点赞收藏,深入学习。
1652 8
|
11月前
|
人工智能 自然语言处理 JavaScript
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
Magnitude是一个基于视觉AI代理的开源端到端测试框架,通过自然语言构建测试用例,结合推理代理和视觉代理实现智能化的Web应用测试,支持本地运行和CI/CD集成。
1480 15
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
|
9月前
|
测试技术
软考软件评测师——可靠性测试测试方法
软件可靠性是指软件在规定条件和时间内完成预定功能的能力,受运行环境、软件规模、内部结构、开发方法及可靠性投入等因素影响。失效概率指软件运行中出现失效的可能性,可靠度为不发生失效的概率,平均无失效时间(MTTF)体现软件可靠程度。案例分析显示,嵌入式软件需满足高可靠性要求,如机载软件的可靠度需达99.99%以上,通过定量指标评估其是否达标。
|
9月前
|
消息中间件 缓存 监控
性能测试怎么做?方法、流程与核心要点解析
本文系统阐述了性能测试的核心方法论、实施流程、问题定位优化及报告编写规范。涵盖五大测试类型(负载验证、极限压力、基准比对、持续稳定性、弹性扩展)与七项关键指标,详解各阶段任务如需求分析、场景设计和环境搭建,并提供常见瓶颈识别与优化实战案例。最后规范测试报告内容框架与数据可视化建议,为企业级实践提出建立基线库、自动化回归和全链路压测体系等建议,助力高效开展性能测试工作。
|
人工智能 自然语言处理 测试技术
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
AxBench 是由斯坦福大学推出,用于评估语言模型可解释性方法的基准测试框架,支持概念检测和模型转向任务,帮助研究者系统地比较不同控制技术的有效性。
340 5
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
|
安全 Java 测试技术
python接口自动化(三)--如何设计接口测试用例(详解)
上篇我们已经介绍了什么是接口测试和接口测试的意义。在开始接口测试之前,我们来想一下,如何进行接口测试的准备工作。或者说,接口测试的流程是什么?有些人就很好奇,接口测试要流程干嘛?不就是拿着接口文档直接利用接口 测试工具测试嘛。其实,如果只是三五个接口,你可以这么做一个临时的接口测试。但是,如果是上百个接口,或者,你们公司的这个项目,第一次做接口测试,那么,我们还是很有必要严格遵守接口测试的流程。
593 0
python接口自动化(三)--如何设计接口测试用例(详解)
|
测试技术
正交试验测试用例设计及工具推荐
在科研和生产实践中,人们往往要做许多次实验来进行某项研究。实验条件一般包括很多因素,当因素的值不同时,实验的结果也不一样。如果想把每个因素的每个值都要实验一遍,总实验数就等于各因素的值的个数的乘积,而这个数往往很大,超过了可接受的成本。 例如,假设某个实验由A,B,C,D四个因素,每个因素都有10个不同的取值,那么如果想把每个因素都考虑到,我们需要做 10*10*10*10=10000次实验。 为了减少实验数目,我们必须选出那些最有代表性的例子。于是,就要用到了正交表法(Orthogonal Array Testing Strategy)。
923 0
正交试验测试用例设计及工具推荐
|
算法 安全 测试技术
【软件测试】测试用例的设计方法
测试用例写的过于简单,则可能失去了测试用例的意义,设计过于简单的测试用例其实并没有真正的进行设计,只是把需要测试的功能模块记录下来而已,它的作用仅仅是在测试过程中作为一个简单的测试计划,提醒测试人员测试的主要功能包括哪些而已,测试用例设计的本质应该是在设计的过程中理解需求,检验需求,并把对软件系统的测试方法的思路记录下来,以便指导将来的测试
【软件测试】测试用例的设计方法