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.数据库单元测试:

  测试存储过程: 使用SQLUnit、utPLSQL;

  数据库存取测试:仅针对存和取进行测试,用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.持续集成与构建

  对测试进行持续集成和持续构建,监控应用的变化,确定测试范围;

  完成系统测试和集成测试后,才进行持续集成。