数码幽灵的自学Blog

.Net 学习历程

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

测试驱动开发允许你在更好的了解问题之前不做出任何决定;在具备足够的关于产品将如何被开发的知识

之前,你不需要提出一个完美的架构;

一个最简单的测试:
所谓实践出真知,现在来做一个做简单的例子;我们不使用任何特殊的工具;
一个计算矩形面积和周长的程序:

public class Quad
 {
     public int Area(int length, int width)
     {
         return 0;
     }
 }

static void Main(string[] args)
 {
     Quad q = new Quad();
     System.Diagnostics.Debug.Assert(q.Area(3,2) == 6);
 }

执行程序,发生“断言失败”的错误,很明显,因为q.Area(3,2)!=6;
接下来硬编码,使q.Area(3,2)==6;
public class Quad
 {
     public int Area(int length, int width)
     {
         return 0;
     }
 }
再次运行,没有任何问题,一切正常;
接下来,重构测试程序:
public class Quad
 {
  private int m_length;
  private int m_width;

  public Quad( int length, int width)//初始化值
  {
   m_length = length;
   m_width = width;
  }
  public int Area()//计算面积
  {
   return m_length * m_width;
  }
  public int Perimeter()
  {
   return m_length*2+m_width*2;
  }

 }
static void Main(string[] args)
  {
   Quad q = new Quad(3,2);
   System.Diagnostics.Debug.Assert(q.Area() == 6);
   System.Diagnostics.Debug.Assert(q.Perimeter()==10);
  }

是的,没有发生任何异常;于是我们就用最简单的形式完成了一次演示TDD(测试驱动开发)的练习;接下

来是对于相关的每一步的摘要:
1.写下一个失败的测试:我们选择了一个看起来最容易实现的测试进行编码;接下来我们写了一个计算矩

形面积的最简单的实现以便编译它,尽管当我们执行程序的时候它发生了中断因为面积并不等于6;
2.修改代码通过测试:修改代码的过程中,我们用硬编码返回值6的方法完成了一个最简单的任务,目标仅

仅是让程序通过测试,接下来,我们使用了不同的参数强迫我们实现一个适当的算法来通过测试;
3.接下来我们重构了代码,使得程序更具有柔韧性,并且更易于理解;

关于TDD,注意到以下几点:
1.测试证明了代码,我们可以通过测试很清晰的看到Quad这个类究竟做了些什么;
2.我们可以通过测试来度量进度;每一个功能都被测试所证明;
3.测试能使每个人都对改变的代码充满自信,即使你是一个使用专家编写的类的C#菜鸟,执行所有测试能

保证你没有搞糟任何事情;
4.失误,正如传递长度与宽度数据给Area 和 Perimeter方法而不是构造函数一样,将在重构中被逐步纠

正;
5.当你在现实世界中使用TDD的时候,你会生成大量的测试,所以你需要使用像NUnit这样的工具组织你的

测试;

使用Nunit进行你的自动化测试:
在成百上千个测试的海洋中,小组成员将频繁经历“编写测试,修改代码,重构”这样的周期;本质就是

你可以很有效率的编写和运行测试;Nunit这样的框架就是设计来帮助你做这些事情的

posted on 2004-06-26 02:55  数码幽灵  阅读(1192)  评论(0编辑  收藏  举报