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
功能完成后,可能要进一步进行代码优化
复杂的系统,有时会难以全面构建,而使用测试驱动能帮助你设计,自顶而下。最
初设计主要的接口不管实现;
此种开发方式,代码质量通常比较好,而且容易进行回归测试
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
功能完成后,可能要进一步进行代码优化