一、单元测试的概念
单元通俗的说就是指一个实现简单功能的函数。单元测试就是只用一组特定的输入(测试用例)测试函数是否功能正常,并且返回了正确的输出。
测试的覆盖种类
1.语句覆盖:语句覆盖就是设计若干个测试用例,运行被测试程序,使得每一条可执行语句至少执行一次。
2.判定覆盖(也叫分支覆盖):设计若干个测试用例,运行所测程序,使程序中每个判断的取真分支和取假分支至少执行一次。
3.条件覆盖:设计足够的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次。
4.判定——条件覆盖:设计足够的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次,并且每个可能的判断结果也至少执行一次。
5.条件组合测试:设计足够的测试用例,运行所测程序,使程序中每个判断的所有条件取值组合至少执行一次。
6.路径测试:设计足够的测试用例,运行所测程序,要覆盖程序中所有可能的路径。
用例的设计方案主要的有下面几种:条件测试,基本路径测试,循环测试。通过上面的方法可以实现测试用例对程序的逻辑覆盖,和路径覆盖。
二、开始测试前的准备
在开始测试时,要先声明一下,无论你设计多少测试用例,无论你的测试方案多么完美,都不可能完全100%的发现所有BUG,我们所需要做的是用最少的资源,做最多测试检查,寻找一个平衡点保证程序的正确性。穷举测试是不可能的。所以现在进行单元测试我选用的是现在一般用的比较多的基本路径测试法。
三、开始测试
基本路径测试法:设计出的测试用例要保证每一个基本独立路径至少要执行一次。
函数说明:当i_flag=0;返回i_count+100
当i_flag=1;返回i_count*10
否则返回i_count*20
输入参数:inti_count,
inti_flag
输出参数:inti_return;
代码:
1intTest(inti_count,inti_flag)
2{
3inti_temp=1;
4while(i_count>0)
5{
6if(0==i_flag)
7{
8i_temp=i_count+100;
9break;
10}
11else
12{
13if(1==i_flag)
14{
15i_temp=i_temp*10;
16}
17else
18{
19i_temp=i_temp*20;
20}
21}
22i_count--;
23}
24returni_temp;
25}
1.画出程序控制流程图
图例:
事例程序流程图:
圈中的数字代表的是语句的行号,也许有人问为什么选4,6,13,8......作为结点,第2行,第3行为什么不是结点,因为选择结点是有规律的。让我们看程序中;第2行,第3行是按顺序执行下来的。直到第4行才出现了循环操作。而2,3行没有什么判断,选择等分支操作,所以我们把2,3,4全部合并成一个结点。其他的也是照这个规则合并,然后就有了上面的流程图。
2.计算圈复杂度
有了图以后我们要知道到底我们有写多少个测试用例,才能满足基本路径测试。
这里有有了一个新概念——圈复杂度
圈复杂度是一种为程序逻辑复杂性提供定量测试的软件度量。将该度量用于计算程序的基本独立路径数目。为确保所有语句至少执行一次的测试数量的上界。
公式圈复杂度V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量。
公式圈复杂度V(G)=P+1,P是流图G中判定结点的数量。
通俗的说圈负责度就是判断单元是不是复杂,是不是好测试的标准。一般来说如果圈复杂度如果大于20就表示这个单元的可测试性不好,太复杂(也许有人觉得无所谓,但是如果你们公司实行了CMMI5的话,对这个是有规定的)。
从图中我们可以看到,
V(G)=10条边-8结点+2=4
V(G)=3个判定结点+1=4
上图的圈复杂图是4。这个结果对我们来说有什么意义呢?它表示我们只要最多4个测试用例就可以达到基本路径覆盖。
3.导出程序基本路径。
现在我们知道了起码要写4个测试用例,但是怎么设计这4个测试用例?
导出程序基本路径,根据程序基本路径设计测试用例子。
程序基本路径:基本独立路径就是从程序的开始结点到结束可以选择任何的路径遍历,但是每条路径至少应该包含一条已定义路径不曾用到的边。(看起来不好理解,让我们看例子)。
让我们看上面的流程图:从结点4到24有几条路径呢?
1B(4,24)
2C,E,J(4,6,8,24)
3C,D,F,H,A,B(4,6,13,15,22,4,24)
4C,D,G,I,A,B(4,6,13,19,22,4,24)
还有吗??
5C,D,C,I,A,C,E,J(4,6,13,19,22,4,6,8,24)算吗?
不算,为什么?因为上面的4条路径已经包括了所有的边。第5条路径已经不包含没有用过的边了。所有的路径都遍历过了。
好了,现在我们有了4条基本独立路径根据独立路径我们可以设计测试用例。
1B(4,24)
输入数据:i_count=0,或者是i_count<0的某一个值。
预期结果:i_temp=0.
2C,E,J(4,6,8,24)
输入数据:i_count=1;i_flag=0
预期结果:i_temp=101.
3C,D,F,H,A,B(4,6,13,15,22,4,24)
输入数据:i_count=1;i_flag=1
预期结果:i_temp=10.
4C,D,G,I,A,B(4,6,13,19,22,4,24)
输入数据:i_count=1;i_flag=2
预期结果:i_temp=20.
这里的输入数据是由路径和程序推论出来的。而要注意的是预期结果是从函数说明中导出,不能根据程序结构中导出。
为什么这么说?
让我们看程序中的第3行。
inti_temp=1;假如开发人员一不小心写错了,变成了inti_temp=0;根据程序导出的预期结果就会是一个错误的值,但是单元测试不出来问题。
那单元测试就失去了意义。
有人也许会问这么简单的函数就有4个测试用例,如果还复杂一些的怎么办?上面的测试用例还可以简化吗?答案是可以。
我们来看路径1B(4,24)和4C,D,G,I,A,B(4,6,13,19,22,4,24),路径1是路径4的真子集,所以1是可以不必要的。上图的圈复杂度是4。这个结果对我们来说有什么意义呢?它表示我们只要最多4个测试用例就可以达到基本路径覆盖。所以说圈复杂度标示是最多的测试用例个数,不是一定要4个测试用例才可以。不过有一点要申明的是测试用例越简化代表你的测试越少,这样程序的安全性就越低了。
 四、完成测试
接下来根据测试用例使用工具测试NUNIT,VS2005都可以。
接下来根据测试结果编写测试报告,测试人,时间,结果,用例,是否通过,格式网上一大把,每个公司的格式也不一样就不说了。

如何编写单元测试用例相关推荐

  1. 2、编写单元测试用例,对用户注册功能的DAO层进行测试。(注意:测试用例应考虑成功和失败的情况)...

    我先对我做的测试进行说明: 对用户注册功能的DAO层进行测试,其实就是对UserDao中的saveUser(User user) 方法进行测试.我在我的测试方法中同时也用到了UserDao中的exit ...

  2. 如何用golang编写单元测试用例

    最近帮忙给一个项目补充单元测试,有一些单测比较不好写, 到网上查了一下,发现有很多有意思的写法,特此总结一下 net.dial 方法的单测 如果我们代码里面使用了net.Dial()去访问外部的tcp ...

  3. Java编程技巧之单元测试用例编写流程

    简介: 立足于"如何来编写单元测试用例",让大家"有章可循",快速编写出单元测试用例. 作者 | 常意 来源 | 阿里技术公众号 温馨提示:本文较长,同学们可收 ...

  4. 单元测试用例_前端单元测试实践

    一说到单元测试,可能对于业务一线同学来说,心理立马就会无形中有一种压迫感,心想 "业务都做不完了,写个球的单元测试,先保证功能完备,赶紧上线才是王道",这句话的核心是以业务为重,没 ...

  5. java 单元测试 异步_Java/Android编写异步的单元测试用例

    不写单元测试用例的程序员不是一个好CTO!!! 注:以下内容编码环境为AndroidStudio_2.4Preview6,测试框架 JUnit4.12 今天在研究 MVP_RxJava2_Retrof ...

  6. JUnit单元测试用例

    2019独角兽企业重金招聘Python工程师标准>>> 注意在编写测试用例的时候,要保持测试用例的独立性 一个原则,每条单元测试用例都必须独立运行,不能依靠其他测试用例,或者不能按照 ...

  7. ultraedit 运行的是试用模式_Wings面向企业级的单元测试用例自动编码引擎

    点击上方"蓝字"关注我们吧! 2020年7月30日,星云测试在TiD2020质量竞争力大会正式发布最新产品"Wings-企业级单元用例自动编码引擎".这是国际首 ...

  8. 8大征兆判断你的单元测试用例写得如何

    300G全套最新软测视频教程分享 链接:https://pan.baidu.com/s/17jkyGn-Wm-zC6QQLkWjrsw 提取码:o94n 如果您从事软件开发很长一段时间,那么您很容易理 ...

  9. 教你快速写出多线程Junit单元测试用例 - GroboUtils

    摘自: http://mushiqianmeng.blog.51cto.com/3970029/897786/ 本文出自One Coder博客,转载请务必注明出处: http://www.coderl ...

  10. Angular Jasmine单元测试用例spec.ts的加载逻辑

    installedModules里存放了很多已经加载的module: req就是我应用的test.ts里硬编码的单元测试用例文件: 执行id为6Eaj的module: 更多Jerry的原创文章,尽在: ...

最新文章

  1. CTFshow php特性 web141
  2. 文本编辑器实现关于对话框的功能
  3. php网页多个倒计时,怎么实现一个页面有多个倒计时同时进行
  4. 7-3 欢迎参加贵工程2021年C语言程序设计大赛! (5 分)
  5. 【微服务架构】SpringCloud组件和概念介绍(一)
  6. Element属性:scrollHeight,clientHeight,offsetHeight区别
  7. 计算机一级如何加脚注,用word添加脚注图文的方法是什么?这个计算机技能不会就晚了...
  8. exls表格搜索快捷键_excel表格快速查找快捷键
  9. 呼吸运动减肥法-可以加快新陈代谢
  10. 计算机网络设计大赛总结,计算机技能大赛总结#.doc
  11. 航程门业:如何选购实木复合门及如何保养
  12. 需求与商业模式创新-商业模式考试复习
  13. 360浏览器: 如何以极速模式打开网址
  14. 嵌入式linux音频播放器设计,基于嵌入式Linux下Madplay音频播放器设计论文.docx
  15. 时钟周期、机器周期、指令周期、总线周期的区别
  16. uva 10014 Simple calculations(数学推导)
  17. 传奇人物--马克·扎克伯格
  18. 网络摄像机产品介绍以及学习
  19. sqlserver数据库安全
  20. 敖夜肝了这份Scrapyd核心源码剖析及爬虫项目实战部署

热门文章

  1. 汽车故障检测仪计算机教程,如何使用汽车故障诊断仪进行汽车维修
  2. limbo模拟器镜像Android,limbo模拟器win7镜像
  3. 钢构cad3.5免费版及命令索
  4. 2022微服务面试题 最新50道题(含答案解析)
  5. 11(1)-AirSim+四旋翼仿真-人工势场法动态避障
  6. VGG16网络,VGG19
  7. M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network AAAI2019
  8. eclipse各版本对应JDK版本要求
  9. Eclipse优化设置技巧
  10. python标准输出sys.stdout_使Python中的函数标准输出静音,而不会破坏sys.stdout并恢复每个函数调用...