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,特别是如何进行对数据库操作的测试,用了非常大的篇幅.其实看看作者是谁,我想你也知道这本书的价值了.

  • 相关阅读:
    区别@ControllerAdvice 和@RestControllerAdvice
    Cannot determine embedded database driver class for database type NONE
    使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
    Markdown语法笔记
    Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
    Mysql 查看连接数,状态 最大并发数(赞)
    OncePerRequestFilter的作用
    java连接MySql数据库 zeroDateTimeBehavior
    Intellij IDEA 安装lombok及使用详解
    ps -ef |grep xxx 输出的具体含义
  • 原文地址:https://www.cnblogs.com/confach/p/213452.html
Copyright © 2011-2022 走看看