如何设计单元测试用例,单元测试快速入门教程四

测试人员在实际工作中根据不同覆盖要求设计面向代码的单元测试用例,运行测试用例后至少应实现如下覆盖需求:

  • 对程序模块的所有独立的执行路径至少覆盖一次;
  • 对所有的逻辑判定,真假两种情况至少覆盖一次;
  • 在循环的边界和运行界限内执行循环体;
  • 测试内部数据结构的有效性等。

至少应设计覆盖如下需求的基于功能的单元测试用例:

  • 测试程序单元的功能是否实现;
  • 测试程序单元性能是否满足要求(可选);
  • 是否有可选的其它测试特性,如边界、余量、安全性、可靠性、强度测试、人机交互界面测试等。

无论白盒、黑盒测试,每个测试用例都应包含4个关键元素:

  • 被测单元模块初始状态声明,即测试用例的开始状态(仅适用于被测单元维持了调用中间状态的情况);
  • 被测单元的输入,包含由被测单元读入任何外部数据值;
  • 该测试用例实际测试的代码,用被测单元的功能和测试用例设计中使用的分析来说明,如单元中哪一个决策条件被测试;
  • 测试用例期望的输出结果(在测试进行前测试说明中定义)。

测试用例设计步骤

步骤1:首先运行被测单元

在单元测试中应该把通过简单的方法能够执行被测单元的测试用例作为第一个测试用例,因为当这个测试用例运行成功时可以增强人的自信心。如果运行失败,最好选择一个更简单的输入对被测单元进行测试/调试。

步骤2:正面测试(Positive Testing)

验证被测单元能够执行应该完成的工作。测试设计者应该查阅相关设计说明,每个测试用例应该测试模块设计说明中一项或多项陈述。如果涉及多个设计说明,最好使测试用例的序列对应一个模块单元的主设计说明。

步骤3:负面测试(Negative Testing)

负面测试用于验证软件不执行其不应该完成的工作。这一步骤主要依赖于错误猜测,需要依靠测试设计者的经验判断可能出现问题的位置。

步骤4:模块设计需求中其它测试特性用例设计

如果需要,应该针对性能、余量、安全需要、保密需求等设计测试用例。在有安全保密需求的情况下,重视安全保密分析和验证是方便的。针对安全保密问题的测试用例应该在测试说明中进行标注。同时应该加入更多的测试用例测试所有的保密和安全问题。

步骤5:覆盖率测试用例设计

应该增加更多的测试用例到单元测试说明中以达到特定的测试覆盖率目标。覆盖率测试一般要求语句覆盖率和判断覆盖率。

步骤6:测试执行

使用上述5个步骤设计的测试说明在大多数情况下可以实现一个比较完整的单元测试。到这一步可以使用测试说明构造和执行测试过程。测试过程可能是特定测试工具的一个测试脚本。

测试过程的执行可以查出模块单元的错误,然后进行修复和重新测试。在测试过程中的动态分析可以产生代码覆盖率测量值,以指示是否已经达到了覆盖目标。

因此需要在测试设计说明中增加完善代码覆盖率的步骤。

步骤7:完善代码覆盖

由于模块单元设计文档规范不一,测试设计中可能引入人为的错误,测试执行后,复杂的决策条件、循环和分支的覆盖率目标可能并没有达到,这时需要进行分析找出原因,导致一些重要执行路径没有被覆盖的可能原因有:

①不可行路径或条件:应该标注测试说明证明该路径或条件没有测试的原因。

②不可到达或冗余代码:正确处理方法是删除这种代码。

③测试用例不足:应该重新提炼测试用例,设计更多的测试用例添加到测试说明中以覆盖没有执行过的路径。

理想情况下,覆盖完善阶段应该在不阅读实际代码的情况下进行。然而,实际上为达到覆盖率目标,阅读实际代码也是需要的。

面向对象应用程序的单元测试用例设计

对面向对象软件的类测试相当于传统软件的单元测试。但与传统软件的单元测试不同,它往往关注模块的算法细节和模块接口间流动的数据,面向对象软件的类测试是由封装在类中的操作和类的状态行为所驱动的。

因为属性和操作是被封装的,对类之外操作的测试通常是徒劳的。封装使得我们难以获得对象的状态,继承也给测试带来了难度,即使是彻底复用的,对每个新的使用语境也需要重新测试。多重继承更增加了需要测试的语境的数量,使测试进一步复杂化。

在类的生命周期中,类测试只是一个初始的测试阶段。类作为独立的成分可以多次在不同的应用系统中重复使用,这些成分的用户可要求每个类是可靠的,无须了解实现细节。

类的测试用例可以先根据其方法设计,然后扩展到方法间的调用关系。如果类中的方法都已定义了前置/后置条件,则可参考这些条件设计对各方法进行测试所需的测试用例。

类测试也采用功能性测试和结构性测试,即黑盒测试和白盒测试。功能性测试以类的规格说明为基础,它主要检查类是否符合规格说明的要求。

测试用例设计实例

例:ATM取款这个组件的功能点有:

(1)正常取款

(2)输入取款金额是否合法

(3)检查是否超出当天最大取款(假设2000RMB)

(4)余额不足(假设余额为1500RMB)

(5)打印收据功能至少一次

测试前提是银行卡和密码都有效,最多允许密码输错5次。功能覆盖测试用例如下所示:

单元最小功能点覆盖实例

用例编号 输入 预期输出 覆盖功能说明
银行卡号 卡密码 取款金额
001 111-8888 654321 500 正常取款,打印收据 (1)(5)
002 111-8888 654321 005 取款金额不合法 (2)
003 111-8888 654321 2500 超出当天最大取款 (3)
004 111-8888 654321 1800 账户余额不足 (4)

单元测试的非功能性测试一般是通过黑盒测试实现特定的功能来达到测试的目的。边界值分析是黑盒测试的经典方法,一般的用例设计都会采用,边界值用例如下图所示:

边界值法设计用例列举

用例编号 输入 预期输出 覆盖功能说明
银行卡号 卡密码 取款金额
001 111-8888 654321 0 取款金额不能为0 测试零边界
002 111-8888 123456 (错2次) 200 正常取款 密码错误次数没超边界
003 111-8888 123456 (错5次) 1000 正常取款 密码错误次数没超边界
004 111-8888 123456

(错6次)

1000吞卡密码错误次数超出边界

也可以根据单元测试中提及的“强制一些错误情况发生”通过黑盒测试来设计测试用例。如ATM系统中主动造成磁盘空间不足,内存空间不足等。如下图所示:

强制错误用例列举

用例编号 输入 预期输出 说明
  支局号  报表类型 报表日期跨度
001 000234 交易明细 7天 交易明细保存失败 报表产生后放于本地系统中,假设本地系统只有500M可用空间,而7天的交易明细有700M

总之,在使用黑盒测试技术设计测试用例时应多方面考虑,至少应该考虑以下几方面:

(1)测试程序单元的所有最小功能点是否覆盖。

(2)测试程序单元非功能性是否满足要求(安全性、可靠性等)。

(3)考虑可选的其他测试特性(接口,人机交互界面等)。

上一篇:单元测试步骤、单元测试策略,单元测试快速入门教程三

125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/1707.html

(0)
江山如画的头像江山如画管理团队
上一篇 2018年4月18日 下午2:28
下一篇 2018年4月18日 下午3:22

99%的人还看了以下文章

  • %matplotlib inline使用详解

    #内嵌画图 %matplotlib inline import matplotlib # 注意这个也要import一次 import matplotlib.pyplot as plt myfont = matplotlib.font_manager.FontProperties(fname=r’C:/Windows/Fonts/msyh.ttf’) # 这一…

    2023年1月13日
    1.0K0
  • java两个窗体Form1和Form2之间怎么传递参数?

    开发java图形界面程序时,会遇到一个窗体向另外一个窗体传递参数的问题,好多初学者很是迷茫。中国网页设计特别编写了一个简单程序用于演示两个窗体之间如何传递参数,代码如下:Form1.java代码: import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.Acti…

    2021年11月25日
    2.4K0
  • itbegin编程教学云课堂使用介绍

    进入https://www.itbegin.com/apps    点击右上角 登录 登录后,点击院校通–院校 点击进入个人中心 点击“web开发技术课堂”,进入相应课程 点击:我的预习,可以看到预习的知识点,时间要求。请同学们一定要在结束时间前完成任务! 点击查看,可以看到需要预习的知识点,预习以观察,查看效果为主。 如要求:观察各标签的使用及…

    2018年3月14日
    4.9K0
  • pycharm 中pip不是内部或外部命令,也不是可运行的程序或批处理文件(直接解决问题)

    在pycharm中输入pip则显示:pip不是内部或外部命令,也不是可运行的程序或批处理文件。 和在命令行输入python提示python不是内部或外部命令,也不是可运行的程序或批处理文件一样,都是环境变量的问题。不用怀疑,www.125jz.com站长亲测!!! pip不是内部或外部命令,也不是可运行的程序或批处理文件的解决方法 1.首先找到pip的安装位…

    2023年1月13日 编程开发
    8.3K0
  • 手机上可以python编程吗,手机如何开发python

    想在手机上编写python代码? python语言应用很广泛,很多小伙伴想利用空闲时间学习Python,但是有时候身边没有电脑,今天就给大家分享两种手机编写运行python的方法,让你可以直接在自己的手机上做python开发学习。 一、直接在线编写运行(免安装) 手机通过浏览器打开 https://c.runoob.com/compile/9/ 推荐:★★★…

    2022年3月16日 编程开发
    8.3K0
  • Java常见面试题200+,学习、面试必备

    本套Java面试题,选取了企业面试最常问到的问题,可以做为Java工程师的面试宝典,也可以做为想要不断完善和扩充自己 java 技术的学习者。 主要包含: Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Myb…

    2019年8月29日
    4.8K0

发表回复

登录后才能评论