2.4 单元测试工具
junit 、testng
2.5 控制点和检查点
控制点:直接输入(参数); 间接输入(控制返回值和状态);
检查点: 直接输出(值和状态); 间接输出(行为);
2.6 测试替身(Test Double)
类型: Dummy Objects、Test Stubs; Test Spies、 Mock Objects 、Fake Objects
Dummy Objects : 测试时用于填充且不做任何事情的对象。
Test Stubs: 替换被测代码内部依赖的方法;
Test Spies: 记录测试运行的日志,比如记录次数;
Mock Objects : 充当Stub;和充当spies;
Fake Objects : 生成一个专用于测试的类,实现测试中需要的方法; 应用场合: 对象所依赖的对象还未实现; 对象所依赖的对象过于复杂;
2.7 Mock使用场合
控制点: 被测对象依赖的某个类和方法需要实现;
检查点: 生成的结果依赖的某个类和方法需要实现;
3.可测试性设计:
依赖注入(Dependency Inject):将内部依赖改为外部传入(参数注入、构造注入、设置函数注入),设置缺省值;
依赖查找(Dependency Look): 在不改动原代码的情况实现注入, 使用factory模式,使用服务定位器(service locator),使用Factory生成测试替身;
Humble Object:在被测对象之上再封装一层,将所有被测对象的依赖全部放入封装对象里,即Humble Object,
测试钩子(test hood) :在被测对象中写一段利于测试的代码,如条件判断是否走生产代码还是测试代码;
4.如何让代码可测试:
感知: 感知某些方法调用产生的效果和影响,主要工具:fake object 和 mock object;
分离: 将应用其它部分分离并单独运行,解依赖技术(代码重构):参数适配、提取并重写工厂方法、封装全局应用、接口提取、实现提取;
5.数据库单元测试:
数据库存取测试:仅针对存和取进行测试,用Fake Object模拟数据库;
6.组织和管理单元测试:
6.1 几种可行的单元测试管理方式:
一个生产类一个测试类;
一个功能一个测试类;
一个fixture一个测试类;
6.2 测试类命名方式:
test+方法名+期望值
6.3 测试执行分组:
使用Test Suite: 分组: 基于功能分组、基于类型分组;
使用Annotation分组(junit4或testng);
6.4 测试文件组织:
测试代码和生产代码放在一起;
使用测试包;
测试依赖的数据文件:使用相对路径;
7.单元测试质量:
7.1 度量纬度:
对业务的代码行覆盖率;
测试执行的稳定性;
测试运行速度(不超过30秒);
7.2 带来的产品质量提升:
缩短产品发布周期;
和系统测试阶段对比发现缺陷的数量;
04 接口测试
1.API测试
1.1 方法分类:
黑盒测试方法: 验证每个API的功能正确性;
白盒测试方法: 考虑各个API之间的关联性;
场景测试: 场景是应用运行的剖面; API组合方式的测试;
1.2 API接口的解依赖
stub、mock、fake
2.Http接口的web测试
使用WebDriver的htmlDriver、htmlUnit;
3.基础项目(支撑其它应用,不直接面向用户)的接口测试
建立接口级别的测试集;
设立可被其它应用访问的最新版本的测试环境;
建立测试环境的持续集成环境;
4.持续集成与构建
对测试进行持续集成和持续构建,监控应用的变化,确定测试范围;
完成系统测试和集成测试后,才进行持续集成。
原文转自:http://www.wangyuxiong.com/archives/52292