基于真实项目的TDD应用
浏览了一下团队的一些文章,很多是关于理论的.我个人是个实用主义者,任何东西对于我来说都是要用的.当然理论也是必不可少的.
敏捷开发包括很多内容,所以我就不多说了.在这里,我想分享一下我在开发中是如何做的.但是由于我是以一个真实的项目做为基础讲解,所以我认为又很多内容要写的,可能一下子写不完,这样只能分几次写了.基于这是做为一个真实的项目,所以很多代码不会贴出来,只在写文章时贴出一些测试用例的代码,这些代码也是经过改编过的,请大家谅解.希望得到大家的支持和鼓励.使我有更大的动力去写完它.
在这些文章里,力求做到以下:
1)尽量解释TDD如何在真实的项目中去应用
2)尽量解释TDD的好处
3)尽量做到TDD的实用性
4)介绍一些关于TDD的文章,书籍等.
就个人而言,我非常喜欢TDD,因为在我的开发中TDD起到了很大的作用.因为现在我使用.NET写程序,所以进行TDD的测试工具是NUnit,关于NUnit我在几个月前写了一篇随笔NUNit详细使用方法,有兴趣的读者可以去看看,希望您费点CPU和内存,给我指出不足和错误指出.在此谢过了.
拿我现在开发的一个Project为例吧.
项目名称:计价系统
项目描述:当坐Taxi时,假设起点是PickUp,终点是Dest.在期间可能存在几个Stop.计算总的价格
1)那么PickUp到Dest的价格(成为Base Rate)如何计算?
一般来说,这两点之间的价格在数据库中都有值,如果找得到话,就是这个值,如果找不到,就按里程计算.
2)如果中间有几个Stop,那么又该如何计算.
这里,涉及到是不是在一个区,是不是相邻的区的等等.
是呀,算法非常复杂,如果没有Stop,这个非常简单,如果有1个站,怎么算呢.假设乘车的顺序为S1--S2--S3.这样需要判断S1和S2是不是相邻(相邻称为Touching)的,如果是,该怎么计算,如果不是,又该怎么计算,如果是在同一个区,又如何计算呢,如果有一个Stop还好说,如果有2个,3个甚至更多,又该如何计算呢.
是的,我自己认为,写代码实现这个逻辑不是太难,难就难在你的代码得出的结果是不是正确的.
好了废话不说了.开始吧.
对于我现在来说,开始先写测试,后写代码.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,特别是如何进行对数据库操作的测试,用了非常大的篇幅.其实看看作者是谁,我想你也知道这本书的价值了.