走进单元测试:测试需要从哪些方面着手
前言
笼统的来说测试条件无非就是两个方面:① 正向测试,② 反向测试!
如果单从这两个方面来思考,肯定出现丢三落四的情况,也就是说不全面,所以应该在上面两种情况的基础上再进行具体划分,那么只要我们能够遵循这些条件基本上就能做到全面(如果能做到,大约80%的问题应该都解决了),于是就出现了下面要说的六个方面内容!
前辈们把这些测试条件总结为:Right – BICEP
1、Right - 做正确的事,可以说是“正向测试”
这种测试前期任务是要准备足够的正确数据(前提是要保证数据的正确性,这个很重要),运行代码后返回的值或产生的影响是要跟自己的预期是一致的!
注意:如果准备的数据太大或容易丢失,建议把它放在数据文件中,然后让单元测试读取这个文件,这种方法会在下一篇会说到!
2、B - 边界条件(Boundary)
边界条件是测试里面的重中之重,必须要有足够的认识和重视!
而它又被分为七个方面的子条件,下面就让我们来一一熟悉它!
① 一致性(Conformance)
数据是否符合我规定的格式(也可以说是非法字符吧)!
案例:比如我传入的参数文件名需要的格式是:文件名 + 日期(yy-mm-dd) + 扩展名,那么我就要写一个测试传入的文件名为 :“sa#$#$#$#”这样的格式!
② 有序性(Ordering)
这方面主要是对涉及到数组和集合的数据,而且对数据的顺序有严格要求的函数,需要对它们里面数据的顺序进行测试!
比如:点菜系统菜谱中每道菜的顺序,或者去银行办理业务的排队系统等等!
③ 范围,区间性(Range)
值是否存在于一个最大值和一个最小值之间,主要是对值类型的数据做的测试!
这里面还有一个重要的测试点是 → 对数组,集合,以及Table,DataSet中的索引值进行测试,比如索引值不能为负,不能超出索引的范围等等情况!
比如:一个通过ID来搜索信息的函数,应该对这个ID进行最大值和最小值的测试!
④ 引用,耦合性(Reference)
这方面主要是:代码是否引用了一些不受本身代码控制的外部因素(比如:调用第三方接口,调用其它模块的接口等等)!
对于这些情况我们是没有办法控制的,所以在测试的时候只能模拟,而在模拟时我们会用到“Mole”技术,让它来帮助我们创建一个模拟环境(下一篇会介绍)!
比如:有的项目会调用银行接口,这种情况下只能先创造一个虚拟银行接口,然后再进行测试!
⑤ 存在性(Exist)
固定的测试,如Null,Empty,非零等等,这些都是必须考虑的!
⑥ 基数性(Cardinality)
对于这个测试说起来还是蛮难理解,这个测试只有在特定的场合下才会去考虑它!
它遵循一个原则:“0-1-N”!
⑦ 时间性(Timer)
对时间比较有依赖的软件或系统应该在这个方面着重测试!
主要考虑:事情是否按时间的顺序执行,是否在正确的时间执行,是否出现执行事情延误了!
相对时间:网站超时,数据更新超时等等!
绝对时间:不同的client间的时间是否同步!
并发问题在时间性测试中比较重要!
3、I - 反向关联(Inversion)
在准备数据或者验证数据时的一种反向思维,涉及到个人的思维方式问题了!
比如:有个函数对数据库进行了操作,但是它没任何返回值也没有任何提示,如果你是对正确的数据进行了测试,那么你要怎么知道测试结果跟你的预期一致呢,这里你就应该去查找数据库,看数据库里面的数据是否有真的改动,这就是一种反向的思维方式!
4、C - 交叉检查(Cross)
用一种数量检查另一种数量(需要考虑的情况不是很多)!
5、E - 强制产生错误(Error)
通过代码强制产生软件在运行过程中出现的特殊情况!
可以参考下面几种测试方面:内存耗光,磁盘用满,断电,正在执行更新数据时出现断网现象,网络负载严重导致瘫痪,系统时间出现导致和国际时间不一致等等一些情况!
6、P - 性能特性(Property)
性能测试工具的使用,没具体研究过性能测试工具,知道的朋友可以说下你们的经验!
进行压力测试,一点一点的加大数据量,10000条,100000条,1000000条这样进行压力测试!
总结:本人对反向关联和交叉检查这两个测试条件不是很理解,知道的朋友可以留言给我,我会把它补充到文章中去!
最后:下面是我对测试条件的小小总结,比较简陋!
走进单元测试:测试需要从哪些方面着手相关推荐
- 单元测试编写_为什么要编写单元测试-测试技巧8
单元测试编写 我对最近的博客"您应该测试什么"有很多React,有些人出于各种原因与我达成一致,另一些人则认为建议某些类可能不需要单元测试是完全危险的. 已经处理了什么测试,今天的 ...
- 为什么要编写单元测试–测试技巧8
我对最近在"您应该测试什么"上的博客有很多反应,有些人出于各种原因同意我的想法,另一些人则认为建议某些类可能不需要单元测试是非常危险的. 已经处理了什么测试,今天的博客涉及为什么要 ...
- 使用模拟的单元测试–测试技术5
我的最后一个博客是有关测试代码方法的一系列博客中的第四篇,演示了如何创建使用存根对象隔离测试对象的单元测试. 今天的博客探讨了有时被视为对立的技术:使用模拟对象进行单元测试. 同样,我使用了从数据库检 ...
- Python 测试驱动开发读书笔记(三)使用单元测试测试简单的首页
使用单元测试测试简单的首页 在上一章结尾,我们有一个简单的测试例子,但是这个例子执行是失败的 失败的原因是浏览器的首页标题不是To-Do,从这章开始编写这个应用 第一个Django应用,第一个单元测试 ...
- 测试还是国外的香?走进海外测试开发工程师
测试还是国外的香?走进海外测试开发工程师 背景:最近看到我们的测试交流圈讨论测试发展要不要去海外,于是为大家整理问答形式解答,欢迎大家补充. 1.能不能介绍一下国外的工作模式和方法以及国外测试的关注是 ...
- 【腾讯TMQ】走进标准化测试
一.引言 为避免大篇幅的概念介绍,我们直接从项目实践入手,为读者朋友理解标准化测试.在开始,只要理解标准化测试是为了解决项目测试实际问题而产生的测试方案即可. 二.背景介绍 手机QQ浏览器(iPhon ...
- docker 端口映射 udp_Docker领路,走进压力测试的现代化 | 51上头条
摘要:Docker技术为软件开发.测试提供了非常便捷的功能,使用现成的镜像让我们的工作事半功倍.本文针对在项目中进行压力测试使用Docker进行说明,重点记录从手工搭建环境,到使用Docker提高测试 ...
- 使用单元测试测试简单的首页
Django鼓励以应用的形式组织代码.这样一个项目中可以放多个应用 为待办事项清单创建第一个应用: manage.py startapp Lists 会在superList文件夹中创建子文件夹List ...
- 第三章 使用单元测试测试简单的首页
3.1第一个Django应用,第一个单元测试 python3 manage.py startapp lists 创建一个应用 功能测试站在用户的角度从外部测试应用,而单元测试从程序员的角度从内部测试应 ...
最新文章
- java大公司后端多线程面试题最强分享
- 【复现】CVE-2015-1635-HTTP.SYS远程执行代码漏洞(ms15-034)
- 多线程之线程池-各个参数的含义- 阿里,美团,京东面试题目
- hibernate中createQuery和createSqlQuery
- 音视频开发(22)---基于RTMP推送实时AAC+H264流(三)
- android 修改系统字体后app崩溃,android 应用在切换系统字体大小和语言时,应用崩溃问题...
- 开发Linux应用程序的三种方法
- AmazeUI 离线文档
- NLP中embeding干了什么事?怎么干的?
- css 控制自动换行,问题:css 自动换行;结果:CSS控制文本自动换行
- 计算器的改良(NOIP2000)
- 随机森林(RandomForest,RF)网格搜索法调参
- 关于 IO、存储、硬盘和文件系统
- python基础之浅谈布尔类型的变量
- C++,cout和std::cout的区别
- 《乔布斯传》圈点(7)
- linux下npm安装的全局命令无法执行
- lol桌面图标在计算机哪找,玩英雄联盟重新创建桌面图标的方法
- stress linux 下压力测试工具
- Autosar AP – AP和CP差异
热门文章
- 设计模式:外观模式(Facade)
- ASP.NET MVC开发中常见异常及解决方案
- php会话(session)生命周期概念介绍及设置更改和回收
- HDU4658 Integer Partition(整数拆分+判断相同数)
- UltraEdit正则表达式介绍及实例
- 如何把Word里的公式放到PowerPoint里
- hive与hbase整合
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
- 线程退出【Linux学习】pthread_create主线程与创建的新线程之间退出关系
- Android的数据存储