Junit学习(二):代码测试的策略

一、如何编写可测试的代码:

1、公共的API就是契约(public api are contracts):为了保证程序向后兼容能力,永远不要修改public方法的签名。

2、减少依赖(reduce dependcy):将初始化新对象的方法和提供业务逻辑的方法隔离开。例子:

class Vehicle {
  Driver d = new Driver();
  boolean hasDriver = true;
  private void setHasDriver(boolean hasDriver) {
    this.hasDriver = hasDriver;
  }
}

重构为:

class Vehicle {
  Driver d;
  boolean hasDriver = true;
  Vehicle(Driver d) {
    this.d = d;
  }
  private void setHasDriver(boolean hasDriver) {
    this.hasDriver = hasDriver;
  }
}

3、创建简单的构造函数(create simple constructor)

4、遵循最少知识的原则(follow the principle of least knowledge):一个类应该仅仅知道他需要知道的事情

例子:

class Car {
  private Driver driver;
  Car(Context context) {
    this.driver = context.getDriver();
  }
}

类Car仅仅需要Driver类,但是却通过Context类获得这个类。所以重构为:

Car(Driver driver) {
  this.driver = driver;
}

5、避免隐藏的依赖和全局变量

6、谨慎使用单例模式(singleton)

7、选用普通的方法(Favor generic method):谨慎使用static方法,因为static方法无法使用多态

8、选用组合而不是集成

9、需用多态而不是条件判断

二、测试驱动开发(TDD)

1、调整开发周期:从传统的code,test(repeat),commit调整为test,code(repeat),commit。

Test代码作为API的第一个客户,通过Test代码验证功能设计,优化程序架构。代码实现以后测试也通过,可以保证代码按照约定完成了实现。

2、TDD两部曲:

在写新代码前先写失败的自动测试代码

消除复制

你可能感兴趣的:(JUnit)