测试驱动开发实践

本教程先讲解一个实际的例子,给大家一个感性的认识,然后再讲解具体的理论


例子

我们要写一个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;
}

这会留下隐患,除非你迫不得已,否则不要这样做。


测试驱动的方式

首先构建一个方法,确定接口

Object add(Object a, Object b) 
{
    throw new TODOException();
}


编写测试用例

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的测试方法是运行不通过的,怎么处理呢?答案很简单:

根据测试用例的运行结果补充代码!


进一步完善-代码

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相加的情况,我们可以通过这种方式继续补充测试用例和实现代码。


简单总结

我们通过上面的例子看到,测试驱动的步骤是:
1、设计主要接口
2、编写测试代码
3、根据测试运行结果补充实现

循环2和3


注意点

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


测试驱动和单元测试的区别

  • 测试驱动:先设计主要接口,接着编写单元测试,根据测试结果补充代码实现
  • 测试驱动是一个开发方法,而单元测试,只是一些对程序的测试代码,或者其它测试手段


为什么需要单元测试

1、复杂的系统,你也许一时难以下手,无法全面构建,测试驱动,使得你能够从容设计,自顶而下。最初设计主要的接口,不管具体的实现。
2、这种开发方式,开发完成后,代码质量通常较好,而且很容易进行回归测试。


复杂的例子怎么办

答案是:没什么两样,例如:

String connString = "...";
IDbConnection conn = new SqlClientConnecion(connString);
conn.Open();
asertEquals(conn.State, ConnectionState.Open);
conn.close();
asertEquals(conn.State, ConnectionState.Close);

这个例子测试了Connection对象的状态转换。


转载自:http://www.cnblogs.com/jobs/archive/2004/08/13/33065.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值