1 背景
测试是开发的一个非常重要的方面,可以在很大程度上决定一个应用程序的命运。良好的测试可以在早期捕获导致应用程序崩溃的问题,但较差的测试往往总是导致故障和停机。

单元测试用于测试各个代码组件,并确保代码按照预期的方式工作。单元测试由开发人员编写和执行。大多数情况下,使用JUnit或TestNG之类的测试框架。测试用例通常是在方法级别写入并通过自动化执行。

单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复、改进或重构之后的正确性。

2 单元测试用例相关概念
2.1正面测试(Positive Testing)
测试被测对象的正确功能实现无误,即正常流程功能。往往需要根据设计说明进行用例导出,严格按照设计说明编写即可,用例划分注意等价类区分等方法。

2.2负面测试(Negative Testing)
测试被测对象的异常功能实现无误,多在异常流程,异常数据中体现。该部分测试需要对被测对象进行错误发散,常依赖于边界值区分等方法。

2.3分支测试
使用流程图,明确可能出现的每条分支,制造响应的数据进行覆盖,实现对被测对象的测试。这个过程对于分支可以进行响应的简化,可以穿插等价类等方法去除同类分支。

2.4 边界值分析法
这种方法更偏向于黑盒测试用例设计中使用,对被测输入进行边界分析,从各个角度都会有边界值,例如程序内部依赖之间,已经有一些边界存在,在程序集成展示后,也会有新的边界出现,在设计的时候,需要注意这些细节。例如我们可输入范围是3-6,和输入类型为浮点数。那么边界值为7-8之间

7 8

| |

3 单元测试设计原则和任务
3.1 三原则
为了提高开发人员的代码质量,编写高质量的单元测试,要遵守3R(Responsible, Reliable, Repeative)原则,具体含义如下:

Responsible: 谁开发谁负责测试,在哪里开发就在哪里测试。

Reliable: 测试case要可靠,并且是值得信赖的,对于底层的任何改动都要能够及时感知。

Repeative: 所有单元测试用例都要能够重复运行。能够重复运行就能够进行回归测试、覆盖率统计等等。

3.2 单元测试任务
一般来说,单元测试任务包括:

1、接口功能测试:用来保证接口功能的正确性。

2、局部数据结构测试(不常用):用来保证接口中的数据结构是正确的

(1)比如变量有无初始值

(2)变量是否溢出

3、边界条件测试

(1)变量没有赋值(即为NULL)

(2)变量是数值(或字符)

a.主要边界:最小值,最大值,无穷大(对于DOUBLE等)

b.溢出边界(期望异常或拒绝服务):最小值-1,最大值+1

c.临近边界:最小值+1,最大值-1

(3)变量是字符串

a.引用"字符变量"的边界

b.空字符串

c.对字符串长度应用"数值变量"的边界

(4)变量是集合

a.空集合

b.对集合的大小应用"数值变量"的边界

c.调整次序:升序、降序

(5)变量有规律

a.比如对于Math.sqrt,给出n^2-1,和n^2+1的边界

4、所有独立执行通路测试:保证每一条代码,每个分支都经过测试

(1)代码覆盖率

a.语句覆盖:保证每一个语句都执行到了

b.判定覆盖(分支覆盖):保证每一个分支都执行到

c.条件覆盖:保证每一个条件都覆盖到true和false(即if、while中的条件语句)

d.路径覆盖:保证每一个路径都覆盖到

(2)相关软件

a.Cobertura:语句覆盖

b.Emma: Eclipse插件Eclemma

5、各条错误处理通路测试:保证每一个异常都经过测试

4 注意事项
4.1独立性
单元测试用例在设计和数据准备的过程中,需要保持良好的独立性,确保本测试的数据是不需要依赖其他输出的,这样减少相互影响。

4.2尽量脱离被测代码的束缚
在测试用例设计的过程中,尤其是测试用例编写在代码编写完成后进行的,一定小心被代码实现功能所影响,多考虑异常分支和异常数据。

4.3面向对象的语言单元测试特点
面向对象的语言进行单元测试还有一定的特点,对于每一个类,可能他出现在程序中的情况各不相同,在进行测试的时候,可以结合上面介绍的方法,根据内部方法相互调用逻辑,完成测试设计。

大体划分两个方向,一个是功能性的,就是类似黑盒的方法,仅仅关注实现的功能点是否正确;另一个就是结构性测试,需要分析类中的方法相互实现逻辑,进行类似白盒测试,确保每个分支覆盖。

5 单元测试用例编写技巧
5.1使用断言
使用断言而不是Print语句许多新手开发人员习惯于在每行代码之后编写System.out.println语句来验证代码是否正确执行。这种做法常常扩展到单元测试,从而导致测试代码变得杂乱。除了混乱,这需要开发人员手动干预去验证控制台上打印的输出,以检查测试是否成功运行。更好的方法是使用自动指示测试结果的断言。

5.2 考虑负面场景
除了正面情景,还要测试负面情景和边缘情况通常,开发人员会花费大量的时间和精力编写测试用例,以确保应用程序按预期工作。然而,测试负面测试用例也很重要。负面测试用例指的是测试系统是否可以处理无效数据的测试用例。

5.3 测试结果的预知性
构建具有确定性结果的测试,一些方法不具有确定性结果,即该方法的输出不是预先知道的,并且每一次都可以改变,为该方法编写测试用例不会有任何用处。

  一、 单元测试的概念

  单元通俗的说就是指一个实现简单功能的函数。单元测试就是只用一组特定的输入(测试用例)测试函数是否功能正常,并且返回了正确的输出。

  测试的覆盖种类

  1.语句覆盖:语句覆盖就是设计若干个测试用例,运行被测试程序,使得每一条可执行语句至少执行一次。

  2.判定覆盖(也叫分支覆盖):设计若干个测试用例,运行所测程序,使程序中每个判断的取真分支和取假分支至少执行一次。

  3.条件覆盖:设计足够的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次。

  4.判定——条件覆盖:设计足够的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次,并且每个可能的判断结果也至少执行一次。

  5.条件组合测试:设计足够的测试用例,运行所测程序,使程序中每个判断的所有条件取值组合至少执行一次。

  6.路径测试:设计足够的测试用例,运行所测程序,要覆盖程序中所有可能的路径。

  用例的设计方案主要的有下面几种:条件测试,基本路径测试,循环测试。通过上面的方法可以实现测试用例对程序的逻辑覆盖,和路径覆盖。

  二、开始测试前的准备

  在开始测试时,要先声明一下,无论你设计多少测试用例,无论你的测试方案多么完美,都不可能完全100%的发现所有BUG,我们所需要做的是用最少的资源,做最多测试检查,寻找一个平衡点保证程序的正确性。穷举测试是不可能的。   所以现在进行单元测试我选用的是现在一般用的比较多的基本路径测试法。

  三、开始测试

  基本路径测试法:设计出的测试用例要保证每一个基本独立路径至少要执行一次。

函数说明 :当i_flag=0;返回     i_count+100
                                当i_flag=1;返回   i_count  *10
                                否则  返回   i_count  *20

输入参数:int i_count , 
                            int i_flag
        输出参数: int  i_return;
       
      
        代码:

1  int Test(int i_count, int i_flag)
 2         {
 3             int i_temp = 0;
 4             while (i_count>0)
 5             {
 6                 if (0 == i_flag)
 7                 {
 8                     i_temp = i_count + 100;
 9                     break;
10                 }
11                 else
12                 {
13                     if (1 == i_flag)
14                     {
15                         i_temp = i_temp + 10;
16                     }
17                     else
18                     {
19                         i_temp = i_temp + 20;
20                     }
21                 }
22                 i_count--;
23             }
24             return i_temp;
25         }

引用:https://blog.csdn.net/moshenglv/article/details/79610986

单元测试用例编写总结 (白盒测试)相关推荐

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

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

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

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

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

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

  4. JUnit单元测试用例

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

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

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

  6. 软件测试用例 单元测试,软件单元测试的测试用例编写方法

    软件单元测试的测试用例编写方法 发表于:2010-09-10来源:作者:点击数: 软件 单元测试 的 测试用例 编写方法 MI LY: 宋体; mso-ascii-font-family: " ...

  7. 软件测试黑盒用例文档,看完这篇黑盒测试用例编写教程,我豁然开朗

    测试用例编写是软件测试的基本技能:也有很多人认为测试用例是软件测试的核心:软件测试中最重要的是设计和生成有效的测试用例:测试用例是测试工作的指导,是软件测试的必须遵守的准则. 在这里我们不讨论以上的各 ...

  8. ​​​​​​​测试用例编写指南

    测试用例编写指南 目录 1 目的 2 适用范围 3 测试设计依据 4 测试用例编写步骤 5 测试用例编写要素 6 测试用例划分原则 6.1 测试需求划分 6.2 测试用例划分 7 测试用例编写要求 8 ...

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

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

  10. Java黑皮书课后题第8章:*8.23(游戏:找到翻转的单元格)假定给定一个填满0和1的6*6矩阵,所有的行和列都有偶数个1。让用户翻转一个单元,编写一个程序找到哪个单元格被翻转了

    *8.23(游戏:找到翻转的单元格)假定给定一个填满0和1的6*6矩阵,所有的行和列都有偶数个1.让用户翻转一个单元,编写一个程序找到哪个单元格被翻转了 题目 题目描述与运行示例 破题 代码 题目 题 ...

最新文章

  1. 22岁天才少女加入华为俄罗斯研究院,曾获「编程界奥赛」冠军
  2. 【python图像处理】几何图形的绘制与文字的绘制(ImageDraw类详解)
  3. fillcolor是什么意思_fill是什么意思
  4. youcans 的 OpenCV 学习课—3.图像的创建与修改
  5. 面试官系统精讲Java源码及大厂真题 - 01 开篇词:为什么学习本专栏
  6. arduino运行java_IC之路(一)Proteus-Arduino仿真环境搭建
  7. CMakeLists.txt的语法介绍和几个实例
  8. [洛谷P1407][国家集训队]稳定婚姻
  9. webpack创建页面的过程
  10. unity3d 取锚点位置_天涯明月刀手游草鱼在哪里钓 天涯明月刀草鱼位置及|天涯|明月-游戏资讯...
  11. Gauss光束在空间中的分布
  12. 全国青少年机器人技术等级考试标准 (三四级/arduino/mixly)
  13. JavaScript判断数组中是否包含某个值?
  14. 零数科技获评《互联网周刊》2021元宇宙潜力企业TOP50
  15. wireshark抓包新手使用教程
  16. 市场调研-船用离合器市场现状及未来发展趋势
  17. SwitchyOmega的简单使用
  18. “贵人语迟”?孩子说话越晚越聪明?
  19. 使用PfamScan的API对蛋白结构域进行注释
  20. 第二十二章:如何管理信息系统

热门文章

  1. FFMPEG详解(完整版)
  2. lbp特征的matlab实现
  3. IPv6在3G网的应用(转)
  4. 吴恩达 深度学习 2021版 笔记
  5. Arduino 超声波避障循迹小车,四轮智能小车
  6. M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid
  7. 我和我的项目之整合腾讯云短信SDK
  8. JEECG框架的dictSelect下拉
  9. 四阶龙格库塔法求解微分方程【MATLAB】
  10. 《别闹了,费曼先生》