zoukankan      html  css  js  c++  java
  • 基于真实项目的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,特别是如何进行对数据库操作的测试,用了非常大的篇幅.其实看看作者是谁,我想你也知道这本书的价值了.

  • 相关阅读:
    区块链技术赋能证券业 多家券商业务率先“上链”
    分布式金融的基础设施:如何驱动主流采用?
    回顾|2019年中国金融科技行业研究报告
    智能投顾行业深度报告:技术为镐,蓝海掘金
    毕马威举办2019中国领先金融科技企业50颁奖典礼
    智能投顾监管半年考:牌照合规 接受度仍待考验
    PostgreSQL串行化隔离级别(SSI)的能力与实现
    邹传伟:对人民银行DC/EP的初步分析
    央行辟谣未发行“DC/EP”和“DCEP” 法定数字货币仍在测试阶段
    php进程daemon化的正确做法
  • 原文地址:https://www.cnblogs.com/confach/p/213452.html
Copyright © 2011-2022 走看看