基于真实项目的TDD应用

      很久就成立了敏捷软件开发团队组织.但是最近几个月一直很忙,没有时间去更新我的Blog,更加不用说写一些相关的文章.

    浏览了一下团队的一些文章,很多是关于理论的.我个人是个实用主义者,任何东西对于我来说都是要用的.当然理论也是必不可少的.

  敏捷开发包括很多内容,所以我就不多说了.在这里,我想分享一下我在开发中是如何做的.但是由于我是以一个真实的项目做为基础讲解,所以我认为又很多内容要写的,可能一下子写不完,这样只能分几次写了.基于这是做为一个真实的项目,所以很多代码不会贴出来,只在写文章时贴出一些测试用例的代码,这些代码也是经过改编过的,请大家谅解.希望得到大家的支持和鼓励.使我有更大的动力去写完它.

  在这些文章里,力求做到以下:
  1)尽量解释TDD如何在真实的项目中去应用
  2)尽量解释TDD的好处
  3)尽量做到TDD的实用性
  4)介绍一些关于TDD的文章,书籍等. 

  就个人而言,我非常喜欢TDD,因为在我的开发中TDD起到了很大的作用.因为现在我使用.NET写程序,所以进行TDD的测试工具是NUnit,关于NUnit我在几个月前写了一篇随笔NUNit详细使用方法,有兴趣的读者可以去看看,希望您费点CPU和内存,给我指出不足和错误指出.在此谢过了.

拿我现在开发的一个
Project为例吧.

项目名称:计价系统

项目描述:当坐Taxi,假设起点是PickUp,终点是Dest.在期间可能存在几个Stop.计算总的价格

  1)那么PickUpDest的价格(成为Base Rate)如何计算?

   一般来说,这两点之间的价格在数据库中都有值,如果找得到话,就是这个值,如果找不到,就按里程计算.

2)如果中间有几个Stop,那么又该如何计算.

 这里,涉及到是不是在一个区,是不是相邻的区的等等.

  是呀,算法非常复杂,如果没有Stop,这个非常简单,如果有1个站,怎么算呢.假设乘车的顺序为S1--S2--S3.这样需要判断S1S2是不是相邻(相邻称为Touching),如果是,该怎么计算,如果不是,又该怎么计算,如果是在同一个区,又如何计算呢,如果有一个Stop还好说,如果有2,3个甚至更多,又该如何计算呢.

 是的,我自己认为,写代码实现这个逻辑不是太难,难就难在你的代码得出的结果是不是正确的.

好了废话不说了.开始吧.

对于我现在来说,开始先写测试,后写代码.
 1using System;
 2using NUnit.Framework;
 3using Price.Business;
 4using Price.DataAccess;//假设Price为我实现的计算价格的域
 5namespace StopPricingFixture
 6{
 7    /// <summary>
 8    /// Summary description for Class1.
 9    /// </summary>

10    [TestFixture]
11    public class StopPricingFixture
12    {
13                public StopPricingFixture()
14        {
15            //
16        }

17        [Test]
18        [Category("Without Stop")]
19        public void  WithoutStop()
20        {      
21                        Price.Business.Pricing mPricing=new Pricing();
22            mPricing.PickUp  ="徐家汇";
23            mPricing.PickupZone ="1";
24            mPricing.Destination="光大汇展中心";
25            mPricing.DestZone="2";
26            mPricing.stopsPrice_Get();
27            Assert.AreEqual(14,mPricing.TotalPriceForStop);
28        }

29
 

上面的代码很简单,先构造一个计算价格的类Pricing,然后设置起点和终点,最后计算价格,然后验证.编译,很明显通不过,这是因为Pricing类没有定义.由于一些原因,这里我就不写出Pricing类的代码了,但是强调的是Pricing类就是计算价格的类.

什么时候这个测试案例才算通过呢?只有在NUnit的进度条为绿色时才算通过.
如果你还想对其他的地址进行测试,可以仿照这个方法进行.
 在此总结一下:
  为了进行在.NET进行TDD开发,你需要注意:
1)了解关于NUnit的用法
2)先写测试,后写代码.当然对于不同的人可能不一样,他们可能先写代码,后写测试
3)这里注意了,因为我上面的Price类需要访问数据库,而且数据库的连接字符串放在config文件里面,所以你必须把这个文件拷贝到测试类的Bin目录下,并且注意config文件的文件名,必须以测试类的dll文件名一样.比如,测试类的dll是PriceTestFixture.dll,那么Config文件的名称为PriceTestFixture.dll.config.

今天写到这里吧.本人从小语文就不好,如果有什么建议和批评,尽管提.

附:
推荐的书籍
 <<Test-Driven Development in Microsoft .NET>>
 James W. Newkirk and Alexei A. Vorontsov 
Microsoft Press © 2004
这本书没有中文版.处于爱好,于是我将之翻译成中文.已经在几个月前翻译完成.但是出于版权问题,所以就不公开了.希望这本书的中文版早点出来.期待中....
这本书绝对是一本入门的书籍,作者通过一个实例,阐述了如何使用TDD,特别是如何进行对数据库操作的测试,用了非常大的篇幅.其实看看作者是谁,我想你也知道这本书的价值了.

posted @ 2005-08-12 15:31  张太国  阅读(3200)  评论(9编辑  收藏  举报