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

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

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

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

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

无论白盒、黑盒测试,每个测试用例都应包含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%的人还看了以下文章

  • python 循环语句的应用:水仙花数判断及爱因斯坦阶梯编程

    一、水仙花数判断程序 1.任务内容: 水仙花数是一个三位整数,如153是一个水仙花数,是因为该数的百位的立方、十位的立方、个位的立方和等于该数本身,如下所示: 2.程序编写要求: 使用for语句完成; 统计水仙花数个数的值保存到变量中,要求自动进行统计 •输出结果如下所示: 153 是水仙数370 是水仙数371 是水仙数407 是水仙数三位数中有4个水仙数…

    2022年5月11日
    9.3K1
  • 简!python中安装pip的方法

     pip的安装 打开cmd,输入以下命令安装pip: python -m ensurepip –default-pip 出现如下图所示,代表pip安装成功: 查看pip版本 pip –version 更新pip版本 python -m pip install –upgrade pip 安装库 例如安装pyyaml库,打开cmd输入以下命令: pip i…

    2023年5月18日
    16.4K0
  • 最清楚的过拟合(Overfitting)、欠拟合讲解

    问题的产生 当我们构建模型时,总会希望假设空间参数尽可能多,系统越复杂,拟合得越好嘛!我们还希望我们的优化算法能使我们的模型产生的损失函数的值尽可能小(即我们的假设空间能够贴合每一个训练样本点)。但这样真的好吗?奥卡姆剃刀貌似又胜利了。然而假设我们的模型达成了上述的情况,有很大概率产生一个ML界非常令人头疼的一件事:过拟合(Overfitting)。 欠拟合…

    2022年9月21日
    9.9K0
  • 中文分词-逆向最大匹配法 “SyntaxWarning: “is“ with a literal. Did you mean “==“?”

    def cutB(sentence,dictB): result = [] sentenceLen = len(sentence) maxDictB = max([len(word) for word in dictB]) while sentenceLen > 0: word = ” for i in range(maxDictB, 0, -1):…

    2023年10月3日
    4.7K0
  • 500 Internal Server Error 错误原因及解决方法(图)

    500 属于服务器内部错误。如果其他网站可以打开,就这一网站打不开,那是该网站的服务器出了问题,跟你的电脑无关,如果其他网页都打不开,你就试着用工具修复一下浏览器。 500内部服务器错误的一般原因是IIS服务器无法解析ASP代码。 如:ASP语法出错、ACCESS数据库连接语句出错,文件引用与包含路径出错、使用了服务器不支持的组件如FSO等。 如果在Wind…

    2018年7月2日
    34.1K0
  • dao service view pojo utils tools都放什么? jsp的(MVC)三层架构入门

    java的(MVC)三层架构(dao、service、view) Java EE典型架构,分层的目的:高内聚,低耦合。 一般java都是三层架构   (还可加一个:工具类:util比如处理多语言功能,网站非法信息过滤等等功能的代码集); 三层架构体系,是逻辑上的三层,按照完成功能不同,所做事宜不同,将项目分为三个层次 1:数据访问层(dao) 2:业务逻辑层…

    2020年10月24日
    11.5K0

发表回复

登录后才能评论