TDD初体验

1、为什么要使用TDD
   复杂的系统,有时会难以全面构建,而使用测试驱动能帮助你设计,自顶而下。最

初设计主要的接口不管实现;
   此种开发方式,代码质量通常比较好,而且容易进行回归测试

2、 TDD的开发步骤
    A、设计主要接口
    B、编写单元测试
    C、根据测试结果补充代码实现
    循环B和C

3、 实例
   需求:编写一个MathUtil类的add方法,方法接口设计如下:
   class MathUtil{
       public static Object add(Object a,Object b);
   }
   要求能够处理如下两种情况:
   a和b都是Integer类型
   a和b都是String类型

   我以前通常会这样子做:
    Object add(Object a, Object b){//动机:待以后再来实现
    return null;
   }
   评价: 这种方式不好,会留下隐患,除非逼不得已,否则不要这么做

   开发过程:
   A、构建一个方法,确定接口
   Object add(Object a, Object b) {
throw new TODOException();
    }

   B、编写一个测试用例:
   void testAdd() throws Exception {
Object left = new Integer(1);
Object right = new Integer(2);
Object result = MathUtil.add(left, right);
assertEqual(result, new Integer(3));
   }
  这时,testAdd的测试方法是运行不通过的,怎么处理呢?答案很简单:
  根据测试用例的运行结果补充代码!

  C、进一步完善-代码:
  Object add(Object a, Object b) {
if (a instanceof Integer
&& b instanceof Integer) {
int leftVal = ((Integer)a).intValue();
int rightVal = ((Integer)b).intValue();
return new Integer(leftVal + rightVal);
}
throw new TODOException();
}
   补充完上面的代码后,已经能够Integer相加的情况,我们可以通过这种方式继续

补充测试用例和实现代码。

4、注意点:
   使用TODOException处理未完成的部分
   在编写代码时,注意代码执行路径的全集
   在测试代码中,使用assert
   功能完成后,可能要进一步进行代码优化

  

猜你喜欢

转载自sunshineyao.iteye.com/blog/737463